鉴于此设置:
2.2.2.2: name: client
WireGuard address: 10.0.0.2
^
|
<internet>
|
v
1.1.1.1: name: gw (ISP router)
LAN address: 192.168.1.1
^
|
v
192.168.3.1: name: wg (br-lan)
WireGuard server
WireGuard address: 10.0.0.3 (wg0)
WAN address: 192.168.1.3 (wan)
客户端(2.2.2.2)可以 ping 通所有 wg 的地址(10.0.0.3、192.168.3.1 和 192.168.1.3),但无法 ping 通 gw 的 lan 地址(192.168.1.1)。
ip route
显示:
default via 192.168.1.1 dev wan src 192.168.1.3 metric 1024
10.0.0.0/24 dev wg0 scope link src 10.0.0.3
10.0.0.2 dev wg0 scope link
192.168.1.0/24 dev wan scope link metric 1024
192.168.3.0/24 dev br-lan scope link src 192.168.3.1
根据其他答案,在 wg (192.168.3.1) 上我尝试过
ip route add 192.168.1.0/24 via 10.0.0.3 dev wg0
当这不起作用时,我删除了路由,重新启动网络,然后尝试
ip route add 192.168.1.0/24 via 192.168.1.3 dev wan
当这不起作用时,我删除了路由,重新启动网络,然后尝试
ip route add 192.168.1.0/24 via 192.168.1.1 dev wan
但没有运气。有什么想法我做错了吗?
PS cat /proc/sys/net/ipv4/ip_forward 显示“1”
答案1
你看起来是什么样子AllowedIPs
的wg.conf
?
如果您想访问两个网络,它应该如下所示:
AllowedIPs = 10.0.0.2/32, 192.168.1.0/24
然后在 WireGuard 服务器上,除了您还需要在和ip_forward
之间设置 Masquerade 和转发:wan
wg
iptables -t nat -A POSTROUTING -o wan -j MASQUERADE
这样防火墙就知道将这些数据包转发到哪里。
例子:
10.10.4.10 - Wireguard Client -> <Internet> -> 10.10.4.1 - Wireguard Server ->
10.10.4.3 - RPI2 at Home acting as a Gateway for VPN -> Hosts in Local Network
我希望能够192.168.1.1
从 WireGuard ping 我的(家庭路由器),因此需要执行以下步骤:
在 WireGuard 服务器上:
10.10.4.3
将(RPI) 允许的 IP 更改为:AllowedIPs = 10.10.4.3/32, 192.168.1.0/24
- 添加
192.168.1.0/24
通过RPI访问的路由规则:ip route add 192.168.1.0/24 via 10.10.4.3 dev wg0
- 重新启动 WireGuard:
wg setconf wg0 /etc/wireguard/wg0.conf
- 允许网络之间转发
iptables -A FORWARD -s 10.10.4.0/24 -d 192.168.1.0/24 -i wg0 -o wg0 -j ACCEPT iptables -A FORWARD -s 192.168.1.0/24 -d 10.10.4.0/24 -i wg0 -o wg0 -j ACCEPT
- 确保已
ip_forward
启用:# cat /proc/sys/net/ipv4/ip_forward 1
- 启用伪装
iptables -t nat -A POSTROUTING -s 10.10.4.0/24 -o eth0 -j MASQUERADE
在 Raspberry PI(VPN 网关)上
- 使能够
ip_forward
echo 1 > /proc/sys/net/ipv4/ip_forward
- 启用伪装
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
- 启用网络之间的 IP 转发
iptables -A FORWARD -s 10.10.4.0/24 -d 192.168.1.0/24 -i wg1 -o eth0 -j ACCEPT iptables -A FORWARD -s 192.168.1.0/24 -d 10.10.4.0/24 -i eth0 -o wg1 -j ACCEPT
结果(在我的电脑上):
$ ping -I wg1 -c 4 192.168.1.1
PING 192.168.1.1 (192.168.1.1) from 10.10.4.10 wg1: 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=62 time=75.5 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=62 time=76.1 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=62 time=74.8 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=62 time=75.5 ms
--- 192.168.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 74.802/75.475/76.082/0.454 ms
$ ping -c 4 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.251 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.204 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.211 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=0.210 ms
--- 192.168.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3074ms
rtt min/avg/max/mdev = 0.204/0.219/0.251/0.018 ms
我的设置有点复杂,因此在您的情况下,您不必在 WireGuard 服务器上添加路由规则,但您绝对应该确保:
- 防火墙规则允许转发
- MASQUERADE 由防火墙规则启用
- 客户端配置中允许的 IP 允许访问您的本地网络
- 尝试从 WireGuard 客户端对网络中的其他主机执行 ping 操作,以消除路由器阻止来自 wg 客户端的 ping 操作的可能性。