![在 Debian 中通过多个子接口进行路由](https://linux22.com/image/601770/%E5%9C%A8%20Debian%20%E4%B8%AD%E9%80%9A%E8%BF%87%E5%A4%9A%E4%B8%AA%E5%AD%90%E6%8E%A5%E5%8F%A3%E8%BF%9B%E8%A1%8C%E8%B7%AF%E7%94%B1.png)
我的问题和标题一样简单,我有一个 debian 6,2 个 NIC,单个接口中有 3 个不同的子网,就像这样:
auto eth0
iface eth0 inet static
address 192.168.106.254
netmask 255.255.255.0
auto eth0:0
iface eth0:0 inet static
address 172.19.221.81
netmask 255.255.255.248
auto eth0:1
iface eth0:1 inet static
address 192.168.254.1
netmask 255.255.255.248
auto eth1
iface eth1 inet static
address 172.19.216.3
netmask 255.255.255.0
gateway 172.19.216.13
eth0
连接到具有 3 个不同 VLAN 的交换机,eth1
连接到路由器。没有 iptables DROP,因此,允许所有流量。现在,流量通过eth0
是可以的,流量通过eth0:0
是可以的,但是,流量通过eth0:1
不起作用,我可以从该 ip 是默认网关的 PC ping 该子接口的 ip 地址,但无法访问接口子网中的服务器eth1
,流量没有通过,即使我将 iptables 设置为记录FORWARD
链中的所有流量,我也可以在那里看到流量,但是,流量实际上并没有通过。有趣的是,我可以反过来做任何事情,我的意思是,从eth1
到eth0:1
、RDP、telnet、ping 等传递,
使用 iptable 进行一些工作,我设法将一些流量从 传递eth0:1
到eth1
,iptables 如下所示:
iptables -t nat PREROUTING -d 192.168.254.1/32 -p tcp -m multiport --dports 25,110,5269 -j DNAT --to-destination 172.19.216.1
iptables -t nat PREROUTING -d 192.168.254.1/32 -p udp -m udp --dport 53 -j DNAT --to-destination 172.19.216.9
iptables -t nat PREROUTING -d 192.168.254.1/32 -p tcp -m tcp --dport 21 -j DNAT --to-destination 172.19.216.11
iptables -t nat POSTROUTING -s 172.19.216.0/24 -d 172.19.221.80/29 -j SNAT --to-source 172.19.221.81
iptables -t nat POSTROUTING -s 172.19.216.0/24 -d 192.168.254.0/29 -j SNAT --to-source 192.168.254.1
iptables -t nat POSTROUTING -s 172.19.216.0/24 -o eth0 -j SNAT --to-source 192.168.106.254
这样做是可行的,但是,必须将每个端口映射到服务器上,这确实很令人头疼,想象一下,如果我将服务从服务器上移走,那么,现在我有疑问:
Debian 可以通过多个子接口路由吗?这有限制吗?如果没有,当我在其他子网中使用相同的设置并且它工作正常时,我做错了什么?如果没有 nat 中的 iptables 规则,它就不起作用
谢谢,希望有好的评论/答案
172.19.216.3 中的路由
root@dbf1:~# ip route
192.168.254.0/29 dev eth0 proto kernel scope link src 192.168.254.1
172.19.221.80/29 dev eth0 proto kernel scope link src 172.19.221.81
172.19.216.0/24 dev eth1 proto kernel scope link src 172.19.216.3
192.168.106.0/24 dev eth0 proto kernel scope link src 192.168.106.254
default via 172.19.216.13 dev eth1
答案1
当一台机器想要将数据包发送到没有路由的目的地时,它会将其转发到其默认网关。您尝试访问的机器正在使用它们生成的回复数据包执行此操作。如果他们使用的默认网关机器不知道如何到达这台机器,那么看起来这台机器没有正确发送流量。但事实确实如此。问题在于回复没有返回。
具体顺序如下:
该机器将数据包发送到正确的机器。
目标机器收到数据包并做出响应。响应的 IP 目标是其收到的数据包的来源。
由于目标计算机不在本地子网上,因此它没有到该数据包目的地的路由。因此它将数据包转发到其默认网关路由器。
该路由器不知道如何到达目的地,因为目的地也不在其子网内。因此,它会通过其默认网关(可能是互联网)发送数据。
为了使网络正常工作,任何作为机器默认网关的设备都必须知道如何到达每一个任何客户端可能希望到达的本地子网,或者每个客户端都必须有自己的方法来到达该子网。