我一直在尝试设置双跳 VPN 连接。第一步是按照本指南建立 Open VPN 连接:https://github.com/mr-canoehead/vpn_client_gateway/wiki/Installation-Guide
它提供了使用 Mullvad 并从 Web UI 中选择不同服务器的选项。它与 PiHole 配合使用效果很好。
之后,我想使用 Wireguard 在同一个 Pi 上建立一个服务器,这样我就可以在外出时连接我的笔记本电脑和手机,不仅可以访问 LAN,还可以使用网关的 VPN 连接。我认为这种双跳会很困难(之前尝试过用两个 OpenVPN 配置来实现,但失败了),所以我查找了一下,发现了这个: Wireguard 服务器和 openvpn 客户端 - 将流量从 wg0 转发到 tun0(openvpn 隧道)
这给了我希望,并决定尝试一下 Wireguard。一切都很顺利,笔记本电脑和手机都连接正常,但它们无法访问互联网。首先,我认为我必须将规则添加到表 4 而不是表 7(如第二个链接中所示),但没有成功。然后我尝试了表 10 和表 11,也没有成功。尝试对该解决方案发表评论,以便我可能在那里得到帮助,但没有足够的声誉。
这是我的路线 -n 输出:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.16.0.1 128.0.0.0 UG 0 0 0 tun-outgoing
0.0.0.0 10.0.1.1 0.0.0.0 UG 202 0 0 eth0
0.0.0.0 10.0.1.1 0.0.0.0 UG 303 0 0 wlan0
10.0.1.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
10.0.1.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0
10.9.0.0 0.0.0.0 255.255.255.0 U 0 0 0 wg0
10.16.0.0 0.0.0.0 255.255.0.0 U 0 0 0 tun-outgoing
128.0.0.0 10.16.0.1 128.0.0.0 UG 0 0 0 tun-outgoing
185.212.170.162 10.0.1.1 255.255.255.255 UGH 0 0 0 eth0
这是我的 iconfig 输出:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.1.2 netmask 255.255.255.0 broadcast 10.0.1.255
inet6 fe80::e871:c051:3610:acb4 prefixlen 64 scopeid 0x20<link>
ether b8:27:eb:c7:2f:28 txqueuelen 1000 (Ethernet)
RX packets 1006 bytes 258399 (252.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 657 bytes 92999 (90.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 2422 bytes 156903 (153.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2422 bytes 156903 (153.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
tun-outgoing: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.16.0.3 netmask 255.255.0.0 destination 10.16.0.3
inet6 fe80::b100:7525:9bb7:31c1 prefixlen 64 scopeid 0x20<link>
inet6 fdda:d0d0:cafe:1302::1001 prefixlen 64 scopeid 0x0<global>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC)
RX packets 161 bytes 55317 (54.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 182 bytes 24177 (23.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wg0: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 1420
inet 10.9.0.1 netmask 255.255.255.0 destination 10.9.0.1
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 4 overruns 0 carrier 0 collisions 0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.1.3 netmask 255.255.255.0 broadcast 10.0.1.255
inet6 fe80::94f8:3b8:7b18:6c6f prefixlen 64 scopeid 0x20<link>
ether b8:27:eb:92:7a:7d txqueuelen 1000 (Ethernet)
RX packets 547 bytes 133449 (130.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 103 bytes 16134 (15.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
注意:tun-outgoing 是 VPN 网关,wg0 是 Wireguard 服务器。
另外,我已经设置 ddclient 来更新 Cloudflare 并通过 Mullvad 转发了一个端口,但由于连接客户端正常,所以我猜这不是问题。
总结一下:
- OpenVPN 上的 VPN 网关 – 正在运行。
- PiHole – 正在运行。
- Wireguard – 可以连接,但如果网关启动,客户端就没有互联网连接。
有人知道我该怎么做吗?我感觉我忽略了一些显而易见的事情,但又想不通。任何帮助都将不胜感激。