我的用例:我希望通过 路由所有互联网流量machine B
。machine A
但是,我无法简单地将 OpenVPN 服务器安装在我无法控制的 NAT/防火墙层后面。我目前的解决方案machine A
是machine 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 subnet
和client-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 A
,192.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 C
VPS 作为 VPN 服务器。有一个官方 VPN 服务,但由于它对某些外部成员开放,第三方供应商不希望允许其 IP 访问。
答案1
原则上,设置应该类似于路由局域网,只是我们不能简单地设置machine A
为处理0.0.0.0
。这个SF回答解释了为什么数据包不能通过另一个客户端作为网关使用 TUN 接口发送。但是,根据第一条评论,有一个解决方法回答。
在machine C
:
- 将以下内容添加到服务器配置中:
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"
machine A
设置 iroutes 和的静态 IPclient-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
:
在
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\
,设置IPEnableRouter=1
。Routing and Remote Access
设置服务Automatic
并确保它正在运行。将网络适配器设置为允许从 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 验证做了一些检查 - 似乎运行良好。但也许我错过了什么……