Linux
兩個網卡之間的路由
我正在嘗試在不同網路之間路由流量並遵循我在此處找到的指南: 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 的流量。
從 Ubuntu 機器 ping 10.0.40.10 可以正常工作。
如果我從 Windows PC ping 10.0.40.10,我可以看到 ICMP 消息使用 tcpdump 到達 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
解決方案就在那裡:
-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