異なるネットワーク間でトラフィックをルーティングしようとしており、ここで見つけたガイドに従いました: 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 経由でルーティングするように設定されています。
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
は から へのパケットの転送を許可するルールはなく、ブリッジ インターフェイスとの間での転送のみが許可されています...eno1
enp2s0f0
異なる iptables を混在させることは常に非常に悪い考えです。 または を使用するかどうかを自分で決定する必要があります。iptables
各iptables-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