这个问题与我之前问过的一个。
我想设置一个 OpenVPN 双客户端盒,这样网关设置为 eth0:0 的计算机的所有流量都通过一个 OpenVPN 隧道路由,网关设置为 eth0:1 的计算机的所有流量都通过另一个 OpenVPN 隧道路由。最终,我希望能够让多台计算机连接到我的双客户端盒,共享该 OpenVPN 隧道(但彼此不知道)。
(来源:serahill.com)
我已经在双客户端盒中设置了以太网别名,并且已将连接主机上的网关设置为双客户端盒上的以太网别名。但是,路由似乎没有正确进行。来自连接主机的任何 ping 都直接发送到双客户端盒的默认网关,而不是通过隧道路由。
这些是我在隧道建立后使用的路由命令:
ip route add default dev $1 table us_table
ip rule add from [ip address of my ethernet alias] table us_table
ip route flush cache
iptables -t nat -A POSTROUTING -o $1 -j MASQUERADE[/code]
这是隧道设置后的路由表:
root@ahost:/etc/openvpn# ip route show
10.26.0.0/24 via 10.26.0.1 dev tun0
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.242
10.26.0.0/16 dev tun0 proto kernel scope link src 10.26.0.2
default via 192.168.1.1 dev eth0 metric 100
这是 us_table 路由表:
root@ahost:/etc/openvpn# ip route show table us_table
default dev tun0 scope link
我的规则:
root@ahost:/etc/openvpn# ip rule show
0: from all lookup local
32765: from 192.168.1.242 lookup us_table
32766: from all lookup main
32767: from all lookup default
对于我遗漏或做错的事情,您有什么建议吗?我被难住了……
答案1
您已设置规则以匹配以太网别名地址:
ip rule add from [ip address of my ethernet alias] table us_table
然而,这永远不会匹配,因为伪装是在 POSTROUTING 链中,即它发生在路由决策已经做出之后。
我从未使用过基于策略的路由,所以我只能猜测您可能需要做些什么才能使其正常工作。手册页说您可以在其他规则之前执行 NAT,这可能会帮您解决问题。或者,您可以使用笔记本电脑或工作站的实际 IP 地址作为源地址(或范围)。
答案2
根据@syneticon-dj 的建议,我为不同的 OpenVPN 客户端分配了不同的子网并设置了路由,以便特定子网中的所有 IP 地址都路由到特定的 tun 设备。
这意味着所有连接的客户端都必须将其网关设置为 OpenVPN 网关,并且其 IP 地址必须位于正确的子网中。
OpenVPN 启动后我的命令是:
ip route add default dev tun0 table us_table
ip rule add from 192.168.233.0/24 table us_table
ip route flush cache
iptables -t nat -A POSTROUTING -o $1 -j MASQUERADE