使用消费级硬件实现站点到站点 VPN

使用消费级硬件实现站点到站点 VPN

我正在尝试使用 OpenVPN 设置路由站点到站点 VPN 来连接两个 NAT 网络,大致按照以下说明进行操作这里

网络 A 使用 IP 范围 192.168.1.0/24。路由器和 OpenVPN 服务器内部为 192.168.1.1,并具有静态外部 IP。

网络 B 使用 IP 范围 10.0.1.0/24。路由器内部 IP 为 10.0.1.1,外部 IP 为动态 IP。我有一台 Raspberry Pi,想将其用作 VPN 客户端和网关,IP 地址为 10.0.1.3。

棘手的是,我尝试用作 OpenVPN 服务器的网络 A 路由器是消费级 TP Link Archer C6 v2 (AC1200)。它在其 Web GUI 中仅提供非常有限的配置选项:UDP 或 TCP(我选择了 UDP)、端口、客户端子网(192.168.0.0/24),以及客户端是否应该只能访问内部网络或内部网络和互联网。我不知道如何查看(更不用说更改)标准 OpenVPN 服务器配置文件。也没有命令行可以设置选项。它主要面向在旅途中访问家庭网络和/或可靠的互联网连接的用例。

因此,我最大的问题是:是否可以使用此路由器作为 OpenVPN 服务器来设置站点到站点的 VPN?许多配置选项都不存在,但也许可以使用 iptables 或网关上的其他工具来解决它们?如果可能的话,我更愿意使用路由器,因为否则我必须在网络 A 中部署更多硬件,但可能我只是想做一些超出其能力的事情。

为了更详细地介绍我迄今为止尝试过的内容,下面是我目前的情况:

我一直在关注设置 Pi。您会注意到,像我迄今为止找到的所有 Pi VPN 指南一样,它都是围绕设置互联网代理类型 VPN 网关而展开的。毫无疑问,我在尝试概括它时犯了错误。非常欢迎提供更接近我想要做的指南的建议。

OpenVPN 客户端配置是:

client
dev tun
proto udp
float
nobind
cipher AES-128-CBC
comp-lzo adaptive
resolv-retry infinite
remote-cert-tls server
persist-key
persist-tun
remote [network A's external IP] [port]
#Added by me
log-append /var/log/openvpn.log
verb 4
user nobody
daemon
[certificates and keys omitted]

这允许 Raspberry Pi 连接;隧道端点被分配 IP 地址 192.168.0.10。

Iptables 在 Pi 上的设置如下:

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT

这样 Pi 就可以 ping 并连接到网络 A 路由器,但无法连接到网络 A 中的其他任何设备。向网络 B 的路由器添加一条路由,将 10.0.1.3 指定为 192.168.1.0/24 的网关,这样网络 B 上的机器就可以类似地 ping 并连接到网络 A 路由器,但无法连接到其他任何设备。我以前可以连接到网络 A 中的其他设备,但我已经把它弄坏了,我不知道是怎么回事。最烦人的是,如果我将其他设备(如我的手机)连接到 VPN,它连接到网络 A 中的其他设备。

iptables 设置的一个明显问题是第一行设置了 NAT,这不是我想要的 - 我希望 A 中的设备能够看到网络 B 中的设备。我尝试更改为-j DNAT,但似乎没有帮助。我也尝试用替换第一行和第三行iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT,但似乎也不起作用。在网络 A 的路由器中通过网关 192.168.0.10 添加到 10.0.1.0/24 的路由会导致所有连接中断,直到它被删除,大概是因为回复数据包撞上 NAT 和/或 Pi 不知道将它们从 tun0 转发到 eth0。有没有办法用 iptables 或多或少透明地来回传输数据包,或者这是我必须控制 OpenVPN 服务器才能做的事情?

相关内容