路由器后面的树莓派上自托管的 Wireguard VPN 没有互联网

路由器后面的树莓派上自托管的 Wireguard VPN 没有互联网

我在 LAN 连接的树莓派上自行托管 Wireguard VPN。我使用本指南设置它并在 TP-Link 路由器 (TL-WR841N) 中完美运行。我不得不更换 TP-Link 路由器,现在有了 OpenWRT(在 MI 4A 盒子中)。除了路由器,我没有改变任何东西。我在路由器中添加了适用的转发端口。我可以连接到 VPN(就像以前一样),我也可以从 LAN 外部通过 SSH 连接树莓派。但不能浏览互联网。我认为这一定是路由器配置中的一个简单修复,我不知道。任何帮助都将不胜感激。

屏幕截图显示成功连接到树莓派托管的 WG VPN:

[![屏幕截图显示成功连接到树莓派托管的 WG VPN][1]][1]

我的/etc/config/firewall样子如下(最后两个条目中的端口转发配置)

config defaults
    option syn_flood '1'
    option input 'ACCEPT'
    option output 'ACCEPT'
    option forward 'REJECT'

config zone
    option name 'lan'
    list network 'lan'
    option input 'ACCEPT'
    option output 'ACCEPT'
    option forward 'ACCEPT'

config zone
    option name 'wan'
    list network 'wan'
    list network 'wan6'
    option input 'REJECT'
    option output 'ACCEPT'
    option forward 'REJECT'
    option masq '1'
    option mtu_fix '1'

config forwarding
    option src 'lan'
    option dest 'wan'

config rule
    option name 'Allow-DHCP-Renew'
    option src 'wan'
    option proto 'udp'
    option dest_port '68'
    option target 'ACCEPT'
    option family 'ipv4'

config rule
    option name 'Allow-Ping'
    option src 'wan'
    option proto 'icmp'
    option icmp_type 'echo-request'
    option family 'ipv4'
    option target 'ACCEPT'

config rule
    option name 'Allow-IGMP'
    option src 'wan'
    option proto 'igmp'
    option family 'ipv4'
    option target 'ACCEPT'

config rule
    option name 'Allow-DHCPv6'
    option src 'wan'
    option proto 'udp'
    option dest_port '546'
    option family 'ipv6'
    option target 'ACCEPT'

config rule
    option name 'Allow-MLD'
    option src 'wan'
    option proto 'icmp'
    option src_ip 'fe80::/10'
    list icmp_type '130/0'
    list icmp_type '131/0'
    list icmp_type '132/0'
    list icmp_type '143/0'
    option family 'ipv6'
    option target 'ACCEPT'

config rule
    option name 'Allow-ICMPv6-Input'
    option src 'wan'
    option proto 'icmp'
    list icmp_type 'echo-request'
    list icmp_type 'echo-reply'
    list icmp_type 'destination-unreachable'
    list icmp_type 'packet-too-big'
    list icmp_type 'time-exceeded'
    list icmp_type 'bad-header'
    list icmp_type 'unknown-header-type'
    list icmp_type 'router-solicitation'
    list icmp_type 'neighbour-solicitation'
    list icmp_type 'router-advertisement'
    list icmp_type 'neighbour-advertisement'
    option limit '1000/sec'
    option family 'ipv6'
    option target 'ACCEPT'

config rule
    option name 'Allow-ICMPv6-Forward'
    option src 'wan'
    option dest '*'
    option proto 'icmp'
    list icmp_type 'echo-request'
    list icmp_type 'echo-reply'
    list icmp_type 'destination-unreachable'
    list icmp_type 'packet-too-big'
    list icmp_type 'time-exceeded'
    list icmp_type 'bad-header'
    list icmp_type 'unknown-header-type'
    option limit '1000/sec'
    option family 'ipv6'
    option target 'ACCEPT'

config rule
    option name 'Allow-IPSec-ESP'
    option src 'wan'
    option dest 'lan'
    option proto 'esp'
    option target 'ACCEPT'

config rule
    option name 'Allow-ISAKMP'
    option src 'wan'
    option dest 'lan'
    option dest_port '500'
    option proto 'udp'
    option target 'ACCEPT'

config redirect
    option target 'DNAT'
    option name 'Raspberry VPN'
    list proto 'udp'
    option src 'wan'
    option src_dport '51820'
    option dest_ip '192.168.1.9'
    option dest_port '51820'

config redirect
    option dest 'lan'
    option target 'DNAT'
    option name 'Raspberry SSH'
    list proto 'tcp'
    option src 'wan'
    option src_dport '22'
    option dest_ip '192.168.1.9'
    option dest_port '22'

答案1

解决方案:衷心感谢 u1686_grawity,他为我指明了正确的方向。问题是,通过更换路由器,我还将 LAN IP 更改为 192.168.1.0/255(之前为 192.168.0.0/255);并将 Pi 的静态 IP 更改为 192.168.1.9(之前为 192.168.0.109)。通过检查 @u1686_grawity 建议的 NAT 表规则,我意识到我必须更改 POSTROUTING 规则(见下文):

iptables -t nat -n -L

Output:
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
SNAT       all  --  10.7.0.0/24         !10.7.0.0/24          to:192.168.0.109  #Needs to be updated to 192.168.1.9

万一这对某人有帮助:

在这个特殊情况下,Wireguard 是使用自动安装程序安装的wireguard-安装.sh它使用公共 IP 地址来确定配置文件中的端点和路由设置。然后,该脚本创建一个 systemd 服务 (wg-iptables.service),该服务在系统每次启动时应用必要的规则。该服务在 /etc/systemd/system/ 下创建,并使用“systemctl enable --now wg-iptables.service”命令启用它在启动时运行。

如果 Wireguard 服务器的 IP 发生变化,您可以选择使用自动安装程序卸载然后重新安装,或者(就像我最后做的那样)修改文件wg-iptables.service因此。如果您选择后者,请记住使用命令“systemctl daemon-reload”重新加载 systemd 管理器配置。

相关内容