2つのネットワークカード間のルーティング

2つのネットワークカード間のルーティング

異なるネットワーク間でトラフィックをルーティングしようとしており、ここで見つけたガイドに従いました: 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 に永続ルートを設定して、10.0.40.0/24 へのすべてのトラフィックを 172.31.0.33 経由でルーティングするようにしています。

ルート印刷出力

Ubuntu マシンは、10.0.40.0/24 宛てのトラフィックを 10.0.40.1 経由でルーティングするように設定されています。

ip r 出力

Ubuntu マシンから 10.0.40.10 に ping を実行すると、期待どおりに動作します。

Windows PC から 10.0.40.10 に ping すると、tcpdump を使用して Ubuntu マシンの 172.31.0.33 インターフェイスに ICMP メッセージが到着しているのがわかります。そのマシンの 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

ルールセットでは、パケットを転送するためのデフォルト ポリシーが DROP に設定されており、そのルールセットにiptables-legacyは から へのパケットの転送を許可するルールはなく、ブリッジ インターフェイスとの間での転送のみが許可されています...eno1enp2s0f0

異なる iptables を混在させることは常に非常に悪い考えです。 または を使用するかどうかを自分で決定する必要があります。iptablesiptables-legacyネットワーク パケットは両方のルールセットを通過するため、かなりの混乱が生じます。

アップデート:
私の回答は、デフォルトのポリシーを accept としてインストールする必要があるという意味ではありません。単に理由を指摘しただけです。もちろん、次のように、これらの特定の 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

関連情報