我已经在 Debian 11 上安装了 Wireguard 并为 iPhone 创建了配置,当对等设备连接时,互联网在 iPhone 上无法运行,在 Debian 11 服务器上也无法运行。
Debian 11上的配置:
[Interface] Address = 10.10.10.1/24
SaveConfig = true
PostUp = iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -F POSTROUTING; iptables -t nat -I POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
ListenPort = 51194
PrivateKey = ***(key from Debian)***
[Peer]
PublicKey = ***(key from iPhone)***
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 60
客户端配置(iPhone)如下:
[Interface]
PrivateKey = ***(key from iPhone)***
Address = 10.10.10.2/36
[Peer]
PublicKey = ***(key from Debian)***
Endpoint = xx.xx.xx.xx:51194
AllowedIPs = 0.0.0.0/0
连接已建立,我可以从 iPhone ping Debian 11,反之亦然。但是,如果我尝试在 iPhone 上打开浏览器并访问随机网站,它不起作用。
另外,如果我尝试从 Debian 11 访问一些随机网站或 IP 地址(使用 curlhttps://xx.xx.xx.xx),它也不起作用,而wg0接口是up的。
而且,我已经启用了 ipforwarding(net.ipv4.ip_forward = 1 和 net.ipv4.conf.all.proxy_arp = 1)。
任何想法?
答案1
使用AllowedIPs
配置设置来指定要通过 WireGuard 连接路由到该对等点的地址。通常,您不希望AllowedIPs = 0.0.0.0/0
在连接的两侧都这样做,因为这意味着连接的两侧都会尝试通过连接的另一端路由所有内容(即所有 Internet 访问)(形成循环循环)。
如果您只想使用 WireGuard 连接从您的 iPhone 访问 Debian 服务器,反之亦然,请执行以下操作:
- 在您的 Debian 服务器上,设置
AllowedIPs = 10.10.10.2/32
(您的 iPhone 的 WireGuard 地址)。 - 在您的 iPhone 上,设置
AllowedIPs = 10.10.10.1/32
(您的 Debian 服务器的 WireGuard 地址)。
或者,如果您想使用 WireGuard 连接通过 Debian 服务器路由所有 iPhone 的互联网流量,请执行以下操作:
- 在您的 Debian 服务器上,设置
AllowedIPs = 10.10.10.2/32
(您的 iPhone 的 WireGuard 地址)。 - 在您的 iPhone 上,保留
AllowedIPs = 0.0.0.0/0
(所有 IPv4 地址)。
三个不相关的缺点:
- 在您的 iPhone 配置中,您确实应该使用
Address = 10.10.10.2/32
(Address = 10.10.10.2/36
IPv4/36
不存在)。 - 您可能希望将您的
PersistentKeepalive
设置从 Debian 配置移至 iPhone 配置——通常您希望将此设置放在具有该设置的同一侧Endpoint
(以允许另一侧在 WireGuard 隧道启动时通过 NAT 发起连接)。 - 您可能想要在您的 Debian 配置中添加
iptables -D FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT;
您的设置 - 您添加的任何 iptables 规则您可能都想要用或删除(否则您最终会得到同一规则的重复副本)。PostDown
-A
-I
PostUp
-D
PostDown
答案2
是的,我想将所有 iPhone 的流量路由到 Debian 服务器。所以我这样做了:
在 Debian 服务器上:
[Interface]
Address = 10.10.10.1/24
SaveConfig = true
PostUp = iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -F POSTROUTING; iptables -t nat -I POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
ListenPort = 51194
PrivateKey = ***(Debian)***
[Peer]
PublicKey = ***(iPhone)***
AllowedIPs = 10.10.10.2/32
在iPhone上:
[Interface]
PrivateKey = ***iPhone***
Address = 10.10.10.2/32
[Peer]
PublicKey = ***Debian***
Endpoint = xxx.xxx.xxx.xxx:51194
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
现在双方的 ping 都运行良好,Debian 服务器上的互联网也运行良好,但 iPhone 上的互联网无法运行(即 iPhone 上似乎没有默认路由)。