OpenVPN 如何通过客户端路由互联网流量

OpenVPN 如何通过客户端路由互联网流量

我的用例:我希望通过 路由所有互联网流量machine Bmachine A但是,我无法简单地将 OpenVPN 服务器安装在我无法控制的 NAT/防火墙层后面。我目前的解决方案machine Amachine A安装 OpenVPN 服务器machine C,并且有machines A作为客户端B连接到C。 我试图设置适当的路线,以便所有来自的流量都B可以通过A。每台机器上的设置和我尝试过的步骤详述如下,我剩下的问题在倒数第二段。

现在,machine C在 Docker 容器中运行 Linux 和 OpenVPN 服务器(https://github.com/kylemanna/docker-openvpn)。通过redirect-gateway def1,两个客户端计算机都可以通过服务器连接和路由流量(https://ipleak.net确认服务器 IP)。但对于以下测试,redirect-gateway def1删除了 ,而添加了topology subnetclient-to-client。服务器具有子网 IP192.168.255.1和公共 IP AAA.BBB.CCC.DDD

machine A运行 Windows 并已IPEnabledRouter=1设置为HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\,服务Routing and Remote Access设置为Automatic并正在运行,并且具有 Internet 访问权限的网络适配器设置为允许从 OpenVPN TAP 适配器共享。它已分配192.168.255.2

machine B运行 Windows 并且位于 IP 为 的路由器后面192.168.1.100。它被分配了 OpenVPN 子网 IP 192.168.255.3。除了 OpenVPN 自动设置的路由外,还添加了以下路由:

Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0        128.0.0.0    192.168.255.2    192.168.255.3    259
        128.0.0.0        128.0.0.0    192.168.255.2    192.168.255.3    259
  AAA.BBB.CCC.DDD  255.255.255.255      192.168.1.1    192.168.1.100    291

machine B,我可以 ping machine A192.168.255.2但是互联网流量仍然通过 OpenVPN 服务器路由(ipleak 显示AAA.BBB.CCC.DDD)。我尝试添加路由:route add default gw 192.168.255.2 tun0,但这会导致客户端无法访问互联网。服务器路由表通常如下所示:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.19.0.1      0.0.0.0         UG    0      0        0 eth0
172.19.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0
192.168.254.0   192.168.255.2   255.255.255.0   UG    0      0        0 tun0
192.168.255.0   0.0.0.0         255.255.255.0   U     0      0        0 tun0

我怎样才能让它工作?

[编辑]关于用例的更多背景信息:我需要为一个部门设置 VPN,以便其用户的家用计算机machine B可以访问基于 IP 地址限制访问的第三方资源。访问machine A不会被阻止,但组织中至少有两层 NAT/防火墙,其管理员不想更改其设置来帮助处理传入连接。因此,我们希望设计一个可行的解决方案,使用machine CVPS 作为 VPN 服务器。有一个官方 VPN 服务,但由于它对某些外部成员开放,第三方供应商不希望允许其 IP 访问。

网络图

答案1

原则上,设置应该类似于路由局域网,只是我们不能简单地设置machine A为处理0.0.0.0。这个SF回答解释了为什么数据包不能通过另一个客户端作为网关使用 TUN 接口发送。但是,根据第一条评论,有一个解决方法回答

machine C

  1. 将以下内容添加到服务器配置中:
topology subnet
client-to-client

route 1.0.0.0 255.0.0.0
route 2.0.0.0 254.0.0.0
route 4.0.0.0 252.0.0.0
route 8.0.0.0 248.0.0.0
route 16.0.0.0 240.0.0.0
route 32.0.0.0 224.0.0.0
route 64.0.0.0 192.0.0.0
route 128.0.0.0 128.0.0.0

push "route 1.0.0.0 255.0.0.0"
push "route 2.0.0.0 254.0.0.0"
push "route 4.0.0.0 252.0.0.0"
push "route 8.0.0.0 248.0.0.0"
push "route 16.0.0.0 240.0.0.0"
push "route 32.0.0.0 224.0.0.0"
push "route 64.0.0.0 192.0.0.0"
push "route 128.0.0.0 128.0.0.0"
  1. machine A设置 iroutes 和的静态 IP client-config-dir
ifconfig-push 192.168.255.2 255.255.255.0
push "route 192.168.255.0 255.255.255.0 192.168.255.1"

iroute 1.0.0.0 255.0.0.0
iroute 2.0.0.0 254.0.0.0
iroute 4.0.0.0 252.0.0.0
iroute 8.0.0.0 248.0.0.0
iroute 16.0.0.0 240.0.0.0
iroute 32.0.0.0 224.0.0.0
iroute 64.0.0.0 192.0.0.0
iroute 128.0.0.0 128.0.0.0

machine A

  1. HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\,设置IPEnableRouter=1

  2. Routing and Remote Access设置服务Automatic并确保它正在运行。

  3. 将网络适配器设置为允许从 OpenVPN TAP 适配器共享,这样每次重启机器时,似乎都必须禁用并重新启用共享。

开启machine B:确保redirect-gateway def1在客户端配置中。

答案2

machine A我已经成功完成了类似的设置,并使用一个选项进行客户端特定的配置:
/etc/openvpn/ccd/machine-a.conf
iroute 0.0.0.0 0.0.0.0

machine B必须使用可用选项之一redirect-gateway

machine C必须使用此选项(除其他外):

dev tun1
client-to-client
topology subnet
client-config-dir /etc/openvpn/ccd

在 OpenVPN 2.6_rc1 上检查。

谢谢洛克·W对于处理的想法0.0.0.0

附言:是的,我在另一个问题的答案中看到过,链接到 Roc W 的帖子,这iroute 0.0.0.0 0.0.0.0不起作用。但我用 tcpdump 和 ip 验证做了一些检查 - 似乎运行良好。但也许我错过了什么……

相关内容