新一代VPN——WireGuard搭建(增加TCP模式)

本文最后更新于 2019年10月9日 20:44 可能会因为没有更新而失效。如已失效或需要修正,请留言

——2019.10.9号 增加wireguard的TCP连接方式,解锁被限制的UDP

 

wireguard

WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec, while avoiding the massive headache. It intends to be considerably more performant than OpenVPN. WireGuard is designed as a general purpose VPN for running on embedded interfaces and super computers alike, fit for many different circumstances. Initially released for the Linux kernel, it is now cross-platform (Windows, macOS, BSD, iOS, Android) and widely deployable. It is currently under heavy development, but already it might be regarded as the most secure, easiest to use, and simplest VPN solution in the industry.

WireGuard®是一种极其简单但又快速的现代VPN,它采用了最先进的加密技术。它的目标是比IPsec更快,更精简,更有用,同时避免大规模的部署。它旨在提供比OpenVPN更高的性能。 WireGuard是一种通用VPN,可以在嵌入式接口和超级计算机上运行,适合多种不同的环境。最初是针对Linux内核发布的,它现在是跨平台的(Windows,macOS,BSD,iOS,Android),并且可以广泛部署。它目前正在大力发展,但它已经被认为是业内最安全,最易于使用和最简单的VPN解决方案。

官网:https://www.wireguard.com/

特点:因采用UDP传输数据,在UDP被限制的区域效果不佳。

搭建过程

系统为Ubuntu 19.04、阿里云国际 1.0一键套餐。

nano /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p

add-apt-repository ppa:wireguard/wireguard
apt update
apt install wireguard

cd /etc/wireguard/
wg genkey | tee sprivatekey | wg pubkey > spublickey
wg genkey | tee cprivatekey | wg pubkey > cpublickey

[Interface]
PrivateKey = 这里填写的是刚才生成的“sprivatekey”的内容
Address = 10.0.0.1/24

# 这里的防火墙规则,网卡名称记得替换为自己的网卡名称。查询:ip add
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 自定义端口
DNS = 8.8.8.8

[Peer]
PublicKey = 这里填写的是刚才生成的“cpublickey”的内容
AllowedIPs = 10.0.0.2/32

服务端配置文件保存为:/etc/wireguard/wg0.conf

[Interface]
PrivateKey = 这里填写的是刚才生成的“cprivatekey”的内容
Address = 10.0.0.2/24
DNS = 8.8.8.8

[Peer]
PublicKey = 这里填写的是刚才生成的“spublickey”的内容
Endpoint = 服务器IP:端口
AllowedIPs = 0.0.0.0/0

wg-quick up wg0

wg-quick down wg0

wg

WireGuard客户端

WireGuard拥有全平台客户端。

Windows下推荐用 tunsafe。拥有比较友好的界面。

官网:https://tunsafe.com


WireGuard TCP模式

近期受到 Cloudflare的1.1.1.1 VPN的影响,wireguard 基本已经无法在国内使用了。

我们可以使用 udp2raw 来将 wireguard 的传输方式 改为TCP,继续使用wireguard(因为进行了转换,理论速度会下降)。

udp2raw GitHub教程:https://github.com/wangyu-/udp2raw-multiplatform/wiki/%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8

实际操作

服务端:

思路:修改wireguard的配置文件 wg0.conf,将MTU的值改为 1200。安装启用udp2raw。

wg-quick down wg0

nano /etc/wireguard/wg0.conf

在 [Interface] 下增加:

MTU = 1200

wg-quick up wg0

curl -o udp2raw https://raw.githubusercontent.com/atrandys/onekeyopenvpn/master/udp2raw && chmod +x udp2raw

nohup ./udp2raw -s -l0.0.0.0:9898 -r 127.0.0.1:你的wireguard端口 --raw-mode faketcp -a -k passwd > udp2raw.log 2>&1 &

这里我们能看到udp2raw使用了9898端口,防火墙需要放通(TCP)


客户端(Windows):

先安装 pcap (https://www.winpcap.org/install/default.htm

客户端下载 (https://github.com/wangyu-/udp2raw-multiplatform/releases

下载客户端后 将文件改名为:udp2raw.exe

新建一个start.bat批处理文件,用于启动udp2raw:

@ECHO OFF
%1 start mshta vbscript:createobject("wscript.shell").run("""%~0"" ::",0)(window.close)&&exit
route add 你的服务器IP mask 255.255.255.255 192.168.2.1 METRIC 20
start /b udp2raw.exe -c -r你的服务器IP:9898 -l 127.0.0.1:2090 --raw-mode faketcp -k passwd

再新建一个stop.bat批处理文件,用于关闭udp2raw:

@ECHO OFF
taskkill /im udp2raw.exe /f
route delete 你的服务器IP
ping -n 2 127.1 >nul

注意udp2raw.exe和这两个bat文件需在一个目录下

再修改wireguard客户端配置文件,MTU改成1200,ip和端口改成127.0.0.1:2090

wireguard

之后先启动start.bat,再连接wireguard客户端即可。

参考:

https://www.atrandys.com/2018/1070.html/comment-page-1

https://github.com/wangyu-/udp2raw-multiplatform/wiki/%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8


参考自:消失的逗比

以下为部分原文:

生成服务端配置文件

# 井号开头的是注释说明,用该命令执行后会自动过滤注释文字。
# 下面加粗的这一大段都是一个代码!请把下面几行全部复制,然后粘贴到 SSH软件中执行,不要一行一行执行!
 
echo "[Interface]
# 服务器的私匙,对应客户端配置中的公匙(自动读取上面刚刚生成的密匙内容)
PrivateKey = $(cat sprivatekey)
# 本机的内网IP地址,一般默认即可,除非和你服务器或客户端设备本地网段冲突
Address = 10.0.0.1/24 
# 运行 WireGuard 时要执行的 iptables 防火墙规则,用于打开NAT转发之类的。
# 如果你的服务器主网卡名称不是 eth0 ,那么请修改下面防火墙规则中最后的 eth0 为你的主网卡名称。
PostUp   = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 停止 WireGuard 时要执行的 iptables 防火墙规则,用于关闭NAT转发之类的。
# 如果你的服务器主网卡名称不是 eth0 ,那么请修改下面防火墙规则中最后的 eth0 为你的主网卡名称。
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# 服务端监听端口,可以自行修改
ListenPort = 443
# 服务端请求域名解析 DNS
DNS = 8.8.8.8
# 保持默认
MTU = 1420
# [Peer] 代表客户端配置,每增加一段 [Peer] 就是增加一个客户端账号,具体我稍后会写多用户教程。
[Peer]
# 该客户端账号的公匙,对应客户端配置中的私匙(自动读取上面刚刚生成的密匙内容)
PublicKey = $(cat cpublickey)
# 该客户端账号的内网IP地址
AllowedIPs = 10.0.0.2/32"|sed '/^#/d;/^\s*$/d' > wg0.conf
 
# 上面的这一大段都是一个代码!请把下面几行全部复制,然后粘贴到 SSH软件中执行,不要一行一行执行!

生成客户端配置文件

# 井号开头的是注释说明,用该命令执行后会自动过滤注释文字。
# 下面加粗的这一大段都是一个代码!请把下面几行全部复制,然后粘贴到 SSH软件中执行,不要一行一行执行!
 
echo "[Interface]
# 客户端的私匙,对应服务器配置中的客户端公匙(自动读取上面刚刚生成的密匙内容)
PrivateKey = $(cat cprivatekey)
# 客户端的内网IP地址
Address = 10.0.0.2/24
# 解析域名用的DNS
DNS = 8.8.8.8
# 保持默认
MTU = 1420
[Peer]
# 服务器的公匙,对应服务器的私匙(自动读取上面刚刚生成的密匙内容)
PublicKey = $(cat spublickey)
# 服务器地址和端口,下面的 X.X.X.X 记得更换为你的服务器公网IP,端口请填写服务端配置时的监听端口
Endpoint = X.X.X.X:443
# 因为是客户端,所以这个设置为全部IP段即可
AllowedIPs = 0.0.0.0/0, ::0/0
# 保持连接,如果客户端或服务端是 NAT 网络(比如国内大多数家庭宽带没有公网IP,都是NAT),那么就需要添加这个参数定时链接服务端(单位:秒),如果你的服务器和你本地都不是 NAT 网络,那么建议不使用该参数(设置为0,或客户端配置文件中删除这行)
PersistentKeepalive = 25"|sed '/^#/d;/^\s*$/d' > client.conf
 
# 上面的这一大段都是一个代码!请把下面几行全部复制,然后粘贴到 SSH软件中执行,不要一行一行执行!

打赏
欢迎转载,请注明出处:轻时代 » 新一代VPN——WireGuard搭建(增加TCP模式)

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    [Peer]
    PublicKey = rj8LT0Fj/2K9DvzUWFE+TY7G4qKG9NXVGgk6IdMcURc=
    AllowedIPs = 192.168.2.2/32

    562354年前 (2019-11-21)回复

打赏一下作者,鼓励他发表更多的精彩文章

支付宝扫一扫打赏

微信扫一扫打赏