从hwdsl2/setup-ipsec-vpn的Readme中的另见里看到了Streisand,看了Streisand中大量的VPN软件,浏览了一下,WireGuard进入视线。从22号开始折腾了两天。

Arch Linux的Wiki中WireGuard文档是很好的参考,使用最后的config文件,很容易在server上使用。

服务端例:

1
sudo sysctl net.ipv4.ip_forward=1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# /etc/wireguard/wg0.conf
[Interface]
Address = 10.200.200.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = UguPyBThx/+xMXeTbRYkKlP0Wh/QZT3vTLPOVaaXTD8=

# note - substitute eth0 in the following lines to match the Internet-facing interface
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# 中文Wiki里使用的是这个
# PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
# client foo
PublicKey = 9jalV3EEBnVXahro0pRMQ+cHlmjE33Slo9tddzCVtCw=
AllowedIPs = 10.200.200.2/32
1
2
3
sudo wg-quick up wg0

#sudo wg-quick down wg0

客户端例子:

1
2
3
4
5
6
7
8
9
10
[Interface]
Address = 10.200.200.2/32
PrivateKey = abciengwngwedeee+cHlmjE33Slo9tddzCVtCw=
# DNS = 10.200.200.1 #需要.1提供非仅127.0.0.1:53的dns服务
# MTU = 1360 # for Google/GCP,否则Google的服务(包括YouTube)是打不开的,其他网站可以

[Peer]
PublicKey = ServerPublicKey/+xMXeTbRYkKlP0Wh/QZT3vTLPOVaaXTD8=
AllowedIPs = 0.0.0.0/0 # LAN: 10.200.200.0/24
Endpoint = serverIPAddress:51820

测试了下带宽,白天略低于Shadowsocks,大概是udp流量会被中间节点限制或丢弃,好像之前买的Wireshark书中提到了这个。昨天晚上对于hk的一台服务器,mac上连通是ok的,但win下不行,至今原因未知,单独写一篇诊断情况。