一直以来我都是使用WireGuard组建安全大内网的,几乎没有拿它来当作代理工具使用。
今天突然要测试一下腾讯云的IP,那还不简单嘛,直接 AllowedIPs=0.0.0.0/0
,让所有流量都走WG就好了!只是简单的测一下,并不想搭个shadowsocks或者OpenVPN什么的。(小心被警告写保证书哦)
结果我一波配置完,却断网了
以为是DNS的问题,配置上 DNS=223.5.5.5,还断网,当然peer的IP能ping通,路由器还能通。
思考了很多可能的因素,包括腾讯云的网络是fullcone NAT,macOS的Darwin内核,本地的IPv6网络,腾讯云的wg配置。尝试了换vultr做peer,开一个新的虚拟机,换手机,换surfshark的配置文件
net.ipv4.ip_forward
和net.ipv4.conf.all.proxy_arp
也都开了,peer也没有防火墙……
最后发现是因为没有添加iptables规则
在腾讯云配置文件中添加两行规则
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens5 -j MASQUERADE; PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens5 -j MASQUERADE;
如果还要支持IPv6的话
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens5 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o en s -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens5 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o ens5 -j MASQUERADE
重新载入一下配置文件就好了。macOS和iOS这边的Interface再加上一个DNS配置就好了
配置文件
腾讯云
[Interface] Address = 192.168.2.1/24 SaveConfig = false ListenPort = 443 PrivateKey = PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens5 -j MASQUERADE; PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens5 -j MASQUERADE; [Peer] PublicKey = AllowedIPs = 192.168.2.64/32
Peer
[Interface] PrivateKey = Address = 192.168.2.64/32 DNS = 223.5.5.5 [Peer] PublicKey = 4 AllowedIPs = 0.0.0.0/0, ::/0 Endpoint = xxxxxx.xxx:443 PersistentKeepalive = 30
参考资料
https://y2k38.github.io/posts/how-to-setup-wireguard-vpn-server/