如何将流量从以太网接口路由到另一个接口?

如何将流量从以太网接口路由到另一个接口?
                 ---------------------------------
                 |                               |
                 |                               |
-----> eth2 (WAN)  --------> WG0-->------->----->  eth0 LAN 192.168.220.2
   192.168.14.7  |       |                       |
                 |       |   eth2 to eth1        |  
                 |       ->---->---------->----->  eth1 LAN  192.168.50.2
                  --------------------------------

我有一台机器,有 3 个以太网接口和 1 个wireguard 客户端接口 wg0。

eth2 (WAN) 192.168.14.7 (internet traffic comes from here)
eth0 (LAN) 192.168.220.2
eth1 (LAN) 192.168.50.2

wg0 (wireguard client) 10.125.146.2

我的设备作为 wg0 的wireguard 客户端工作。 Wireguard 服务器位于 VPS 上。我已经使用 iptables 从wg0 to eth0LAN 转发流量。所以我的笔记本电脑连接到eth0 192.168.220.2 with public IP from wg0.

如果我也连接另一台笔记本电脑eth1 the public IP is from wg0。我不想要它。我想将另一台笔记本电脑连接到eth1 192.168.50.2 没有来自 wg0 的 IP。我希望 eth1 拥有来自 eth2 WAN 的公共 IP。

可以这样做吗?

路线-n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.14.1    0.0.0.0         UG    204    0        0 eth2
10.125.146.0    0.0.0.0         255.255.255.0   U     0      0        0 wg0
169.254.0.0     0.0.0.0         255.255.0.0     U     202    0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     203    0        0 eth1
192.168.14.0    0.0.0.0         255.255.255.0   U     204    0        0 eth2
192.168.50.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.220.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0

ip路由

default via 192.168.14.1 dev eth2 proto dhcp src 192.168.14.7 metric 204 
10.125.146.0/24 dev wg0 proto kernel scope link src 10.125.146.2 
169.254.0.0/16 dev eth0 scope link src 169.254.50.120 metric 202 
169.254.0.0/16 dev eth1 scope link src 169.254.231.124 metric 203 
192.168.14.0/24 dev eth2 proto dhcp scope link src 192.168.14.7 metric 204 
192.168.50.0/24 dev eth1 proto kernel scope link src 192.168.50.2 
192.168.220.0/24 dev eth0 proto kernel scope link src 192.168.220.2 

ip规则显示

0:  from all lookup local
32764:  from all lookup main suppress_prefixlength 0
32765:  not from all fwmark 0xca6c lookup 51820
32766:  from all lookup main
32767:  from all lookup default

ip -4 -br 地址

lo               UNKNOWN        127.0.0.1/8 
eth0             UP             192.168.220.2/24 169.254.50.120/16 
eth1             UP             192.168.50.2/24 169.254.231.124/16 
eth2             UP             192.168.14.7/24 
wg0              UNKNOWN        10.125.146.2/24 

ip 路由显示表 51820

default dev wg0 scope link 

ip 路由显示表主

default via 192.168.14.1 dev eth2 proto dhcp src 192.168.14.7 metric 205 
10.125.146.0/24 dev wg0 proto kernel scope link src 10.125.146.2 
169.254.0.0/16 dev eth0 scope link src 169.254.50.120 metric 202 
192.168.14.0/24 dev eth2 proto dhcp scope link src 192.168.14.7 metric 205 
192.168.50.0/24 dev eth1 proto kernel scope link src 192.168.50.2 linkdown 
192.168.220.0/24 dev eth0 proto kernel scope link src 192.168.220.2 

答案1

您的eth2IP地址以192.168开头,这意味着它是不是首先是公共IP。您的eth2接口必须连接到路由器、防火墙或其他支持 NAT 的设备,这些设备拥有该网段组中唯一的非 VPN 公共 IP 地址。

您的系统具有一些有效的高级路由规则,很可能是由 Wireguard VPN 创建的。

0:  from all lookup local                      <- default rule
32764:  from all lookup main suppress_prefixlength 0
32765:  not from all fwmark 0xca6c lookup 51820
32766:  from all lookup main                   <- default rule
32767:  from all lookup default                <- default rule

最左边一列的数字是每行指定的路由规则的优先级。

  • 优先级为 0 的规则是标准的,本质上意味着:“任何发送到该系统自己地址的流量都将使用适当的源地址在本地进行处理。”
  • 优先级 32764 行的意思是:“对于其他一切,使用标准主路由表但忽略默认网关条目。“这条规则似乎基本上可以处理所有不流向默认网关的流量。
  • 优先级32765行的意思是:“任何没有被标记的流量fwmark 0xca6c都会被处理使用路由表 51820。”这很可能意味着任何将通过默认网关发出但尚未通过 Wireguard 处理的流量。
  • 优先级 32766 是另一个默认规则,基本上是说“对于到目前为止尚未成功路由的任何内容,按原样使用标准主路由表”。当 Wireguard 处于活动状态时,这将仅用于流向 VPS Wireguard 服务器的加密 Wireguard 流量。
  • 优先级 32767 是另一个默认规则,它将主路由表未涵盖的任何内容发送到另一个名为 的表进行处理default,该表通常为空,除非需要某些自定义后处理。

您的route -nip route命令都会显示main路由表。您可以使用命令的完整形式来验证这一点ip routeip route show table main

ip route show table 51820为了充分了解 Wireguard 如何影响路由,还需要查看输出。

如果您希望插入的设备eth1绕过 Wireguard VPN 并使用非 VPN 公共 IP,则必须配置三项内容:

  • 您必须找到一种方法来配置来自网络 192.168.50.0/24 的传出流量的路由规则,以使 Wireguard 客户端不会覆盖它。在不知道输出的情况下,ip route show table 51820我认为我无法在这里建议任何确切的命令。
  • 你必须配置eth2您所连接的路由器相当于ip route add 192.168.50.0/24 via 192.168.14.7,因此它会知道您的设备后面是另一个网段。否则,它将不知道如何处理对插入您的任何设备发起的连接的任何响应eth1,并且只会拒绝它们。
  • 你必须配置eth2您所连接的路由器同时对192.168.50.0/24网段进行NAT。您可能很幸运,发现路由器将对所有私有 192.168 进行 NAT。默认网段。或不。

如果您无法配置路由器,或者路由器是消费级设备,不够灵活,无法以这种方式进行配置,则无法使用路由来执行此操作;见下文。


另一种方法可能更可靠,更容易理解和排除故障,并且基本上独立于配置路由器的能力:

  1. 获取具有适当速度等级的网络交换机和一根额外的网络电缆。除非您有其他要求,否则便宜的、不可管理的 5 端口交换机应该就可以了。
  2. 断开 WAN 电缆与eth2设备接口的连接,并将其插入交换机的第一个端口。
  3. 将新的网络电缆连接到交换机的第二个端口,并将电缆的另一端插入eth2您的设备。
  4. 断开另一台笔记本电脑与eth1设备的连接,并将其插入交换机的第三个端口。
  5. 完毕。

如果路由器有未使用的网络端口可以使用,您甚至不需要交换机:只需将“eth1 笔记本电脑”直接插入路由器即可。

显然,此解决方案的任何变体都会使“eth1 笔记本电脑”从路由器获得 192.168.14.* 地址,并有效地完全消除 192.168.50.0/24 网段。您设备的接口eth1将保持未使用状态。

此外,如果有任何严格的安全要求需要将 VPN 流量与非 VPN 流量分开,这将是我推荐的唯一解决方案类型。


如果流量流向“eth1 笔记本电脑”必须通过您的设备,但您无法配置您的上游路由器eth2,那么您可能会考虑桥接eth1和网络接口eth2,而不是徒劳地尝试通过路由来解决这个问题。

然后,您设备的默认网关将与桥接设备而不是单个接口关联eth2,并且您将能够用于ebtables过滤到“eth1 笔记本电脑”的流量,就像iptables在路由情况下一样。单独的 192.168.50.0/24 网段仍将被消除,“eth1 笔记本电脑”将从路由器的 192.168.14.0/24 网段获取其本地 IP 地址。

但是,我不知道 Wireguard 客户端是否可以在配置为桥接的系统中工作。我不明白为什么不应该这样做,但如果客户端被编程为防止您的 VPN“泄漏”,那么做您想做的事(无论是通过路由还是桥接)对于 Wireguard 来说似乎是故意“泄漏”。


我还简要考虑并拒绝了涉及双重 NAT 的解决方案。我个人认为,这些解决方案往往会在当前带来一些便利的同时,带来未来无法预知的故障排除麻烦。这是一笔糟糕的交易。只需说“不”即可。

相关内容