デバイスAからデバイスBを介してデバイスCにパケットを転送しようとしています。私がしなければならないことは、デバイスAで次のように言うだけです。 CのパケットはBに送信され、BはCの位置を知っているので、すべてが機能するはずです。
しかし、これはうまくいきません。確認してnet.ipv4.ip_forward=1
設定/proc/sys/net/ipv4/ip_forward = 1
が完了しましたsysctl -w net.ipv4.conf.all.rp_filter=0
。万が一の場合に備えて、特定のデバイスにも同じ値を設定しました。
たとえば、
デバイス A = 192.168.10.1/24
デバイス B eth0 = 192.168.10.2/24
デバイス B eth1 = 192.168.11.1/24
デバイス C = 192.168.11.2/24
すべてのデバイスには、必要なプライマリサブネットへのパスがあります(デバイスB:など)。
192.168.10.0/24 dev eth0 proto kernel scope link src 192.168.10.2
192.168.11.0/24 dev eth1 proto kernel scope link src 192.168.11.1
理論的に私がすべきことは、デバイスAで次のように言うことです。
sudo ip route add 192.168.11.0/24 via 192.168.10.2
しかし、うまくいきません。
これで最も奇妙なことは、A Yesから192.168.11.1にpingを送信できることです。しかし、192.168.11.2ではありませんか?サブネットのデバイスには到達できますが、サブネットの他のアドレスには到達できないのはどうすればよいですか?
着信パケットに対してルーティングテーブルが機能しませんか?
https://wiki.nftables.org/wiki-nftables/index.php/Netfilter_hooks この図は、入力チェーン前と出力チェーン前の2つのルーティング決定を示しています。ルーティングテーブル(ip Routeコマンドで表示)は、出力チェーンより前の決定にのみ適用されるようです。これは、デバイスBで192.168.11.2をpingすると見つけることができるからです。
私の主な質問は、これが予想されるものですか?
答え1
ボードの新しい画像に設定をコピーすると、期待どおりに機能します。 net.ipv4.ip_forward=1 ですが、パケットは転送されません。
まだ正確な理由は不明ですが、使用中の開発ボードではイメージがあまり安定していません。