两块网卡之间的路由

两块网卡之间的路由

我正在尝试在不同的网络之间路由流量,并遵循我在此处找到的指南: https://devconnected.com/how-to-add-route-on-linux/

下面是一张图表,我希望它能够充分描述我正在使用的安排:

Windows 10              Ubuntu                            Linux
172.31.0.X <----------> 172.31.0.33 (eno1)
                        10.0.40.1 (enp2s0f0) <----------> 10.0.40.10

我在 Windows PC 上设置了一条持久路由,以通过 172.31.0.33 路由 10.0.40.0/24 的任何流量。

路线打印输出

Ubuntu 机器设置为通过 10.0.40.1 路由发往 10.0.40.0/24 的流量。

ip r 输出

从 Ubuntu 机器 ping 10.0.40.10 一切正常。

如果我使用 tcpdump 从 Windows PC ping 10.0.40.10,我可以看到 ICMP 消息到达 Ubuntu 机器上的 172.31.0.33 接口。我没有看到该机器上的 10.0.40.1 接口有任何流量。看来 Ubuntu 机器没有像我预期的那样路由流量。有人能解释一下我错过了什么吗?

添加输出:

iptables -S

对于 Ubuntu 机器:

sudo iptables -S
# Warning: iptables-legacy tables present, use iptables-legacy to see them
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A FORWARD -i eno1 -j ACCEPT
-A FORWARD -i enp2s0f0 -j ACCEPT
adi@LabBuildServer:~$ sudo iptables-legacy -S
[sudo] password for adi:
-P INPUT ACCEPT
-P FORWARD DROP
-P OUTPUT ACCEPT
-N DOCKER
-N DOCKER-ISOLATION-STAGE-1
-N DOCKER-ISOLATION-STAGE-2
-N DOCKER-USER
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -o br-e925d11be2da -m conntrack --ctstate RELATED,ESTABLISHED -j ACCE                         PT
-A FORWARD -o br-e925d11be2da -j DOCKER
-A FORWARD -i br-e925d11be2da ! -o br-e925d11be2da -j ACCEPT
-A FORWARD -i br-e925d11be2da -o br-e925d11be2da -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -i br-e925d11be2da ! -o br-e925d11be2da -j DOCKER-IS                         OLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -o br-e925d11be2da -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN

输出:

ip route

在 Linux 主机上:

ip route
default via 10.0.40.1 dev br-POE  proto static
10.0.40.0/24 dev br-POE  proto kernel  scope link  src 10.0.40.10

Ubuntu 机器:

adi@LabBuildServer:~$ sudo iptables -t nat -L
[sudo] password for adi:
# Warning: iptables-legacy tables present, use iptables-legacy to see them
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  anywhere             anywhere
MASQUERADE  all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

答案1

解决方案就在那里:

-P FORWARD DROP

在您的iptables-legacy规则集中,转发数据包的默认策略设置为 DROP,并且该规则集中没有允许将数据包从eno1转发到 的规则enp2s0f0,只允许从/向桥接接口转发...

混合使用不同的 iptables 总是一个很糟糕的想法,您应该自己决定是否要使用iptables或者iptables-legacy- 每个网络数据包都将经过两个规则集,从而造成相当大的混乱。

更新
我的回答不应该意味着您必须将默认策略安装为接受,我只是指出原因。当然,您可以添加规则以仅允许将流量转发到这些特定 IP,例如:

-A FORWARD -i eno1 -s 172.31.0.0/24 -o enp2s0f0 -d 10.0.40.0/24 -j ACCEPT
-A FORWARD -i enp2s0f0 -s 10.0.40.0/24 -o eno1 -d 172.31.0.0/24 -j ACCEPT

相关内容