将以太网别名上的流量路由到默认网关

将以太网别名上的流量路由到默认网关

这个问题与我之前问过的一个

我想设置一个 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

相关内容