現在、Linuxでネットワーク名前空間を使用してネットワークをシミュレートしようとしています。ノードを確立して接続し、一度に1ホップずつ互いにpingできます。しかし、IP転送を有効にするには本当に問題があります。
私はUbuntu Server 21.04を使用しており、システムのネットワークはsystemd-networkdによって制御されています。 systemd バージョンは 247.3-3ubuntu3.4 です。net.ipv6.conf.all.forwarding
すでにnet.ipv4.ip_forward
有効になっています。ネットワーク接続を使用しているため、構成ファイルでも転送を有効にする必要があります。私の名前空間の1つは次のとおりです。
/etc/systemd/network/router1i.network:
[Match]
Name=router1i
[Network]
IPForward=yes
および/etc/systemd/network/router1i2.network:
[Match]
Name=router1i2
[Network]
IPForward=yes
これら(router1i
およびrouter1i2
)は veth インタフェースであり、名前空間にある唯一の 2 つのインタフェースです。
名前空間でコマンドを使用すると、パスに転送が含まれないため、ip -6 route get to fe80::1:0:200 iif router1i2
正解が得られます。他のインターフェースから始まったfe80::1:0:200 from :: dev router1i2 proto kernel metric 256 iif router1i2 pref medium
同様のコマンドを使用すると、ip -6 route get to fe80::1:0:200 iif router1i
答えは突然yesですRNETLINK answers: Network is unreachable
。配信が有効になっていないようです。
networkctl reconfigure router1i
名前空間内でを使用してネットワークを更新しようとしましたが、このメッセージはFailed to reconfigure network interface router1i: No such device or address
奇妙です。使用すると、networkctl status router1i
すべての情報が正しくリストされているためです。また、完全なリフレッシュを試しましたが、networkctl reload
何も変更されませんでした。
正直に言って、とにかくどうすることはできません。ネットワーク作業に必須ではありません。どんなアイデアや解決策でも大変感謝します。
編集する:
dirktが提案したように、リンクローカルアドレスを一意のローカルアドレスに置き換えました。の出力と判断すると、パスが正しく選択されましたip -6 route get
。ただし、まだ他のネットワークインターフェイスに対してpingを実行することはできません。正直なところ、エラーが見つからなかったので、以下に詳細を追加します。
インターフェース構成:
ubuntu@ubuntu:~$ sudo ip netns exec Router1 ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group`default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
6: router1i@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether be:fc:8e:30:e4:18 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fd00:0:0:1000::1/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::bcfc:8eff:fe30:e418/64 scope link
valid_lft forever preferred_lft forever
8: router1i2@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether d6:3f:e9:9a:93:f3 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fd00:0:0:1001::1/63 scope global
valid_lft forever preferred_lft forever
inet6 fe80::d43f:e9ff:fe9a:93f3/64 scope link
valid_lft forever preferred_lft forever
IPv6ルーティングテーブル:
ubuntu@ubuntu:~$ sudo ip netns exec Router1 ip -6 route
fd00:0:0:1000::/64 dev router1i proto kernel metric 256 pref medium
fd00:0:0:1000::/63 dev router1i2 proto kernel metric 256 pref medium
fe80::/64 dev router1i proto kernel metric 256 pref medium
fe80::/64 dev router1i2 proto kernel metric 256 pref medium
default via fd00:0:0:1001::2 dev router1i2 metric 1024 pref medium
出力ip netconf
:
ubuntu@ubuntu:~$ sudo ip netns exec Router1 ip netconf
inet lo forwarding on rp_filter loose mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off
inet router1i forwarding on rp_filter loose mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off
inet router1i2 forwarding on rp_filter loose mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off
inet all forwarding on rp_filter loose mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off
inet default forwarding on rp_filter loose mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off
inet6 lo forwarding on mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off
inet6 router1i forwarding on mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off
inet6 router1i2 forwarding on mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off
inet6 all forwarding on mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off
inet6 default forwarding on mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off
今動作します:
ubuntu@ubuntu:~$ sudo ip netns exec Router1 ip -6 route get to fd00:0:0:1001::2 iif router1i
fd00:0:0:1001::2 from :: dev router1i2 proto kernel metric 256 iif router1i pref medium
ただし、実際にrouter1iでアドレスをpingしようとすると、次のようになります。
ubuntu@ubuntu:~$ sudo ip netns exec Router1 ping6 fd00:0:0:1001::2 -I router1i
ping6: connect: Network is unreachable
転送がオンになっており、正しいパスが選択されました。なぜまだ動作しないのですか?
編集2:
私はそれを働かせた!助けてくれた皆さんに感謝します。
明らかに、-Iオプションを使用したpingの効果を誤って判断したようです。これは私を混乱させ、私の未熟さは役に立ちませんでした。この方法をもう少し早く見つけなければなりませんでした。
とにかく、もう一度ありがとう、良い一日を過ごしてください!
答え1
fe80::/10
リンクローカルアドレスです。私はこれがルーティング可能であるとは思いません(ルーティング可能にするいくつかのトリックがあるかもしれませんが、試したことはありません)。
IPv6ルーティングを試みるには、代わりにそれを使用しないでください。一意のローカルアドレスfc00::/7
インターフェイスのリンクローカルアドレス(通常は自動設定)に加えて、es(ULA、範囲)があります。
また、デバッグにも使用できますip -6 route get from ... to ...
。
ip route add ...
プレイ中はいつものようにルートを設定してください。
ルートを設定することを忘れないでくださいみんな「転送」ノードだけでなく、パケットパス(またはあなたの場合は名前空間)に従うノードです(これを忘れるのは一般的な初心者の間違いです)。
「あるインターフェースから別のインターフェースに移動」(使用すると仮定)して-I
人生を難しくしない限り、これを行うのは簡単です。
3つの名前空間A、B、Cを設定します。 AとBをvethペアで接続し、BとCをvethペアで接続します。 4つのネットワークインターフェイスすべてにULAアドレス(正しいサブネット、1つのA / Bサブネット、1つのB / Cサブネットを含む)を配置します。 AとCのデフォルトパスを設定します(該当するBインターフェイスを介して)。 Bで転送を有効にします。次に、AからBの近距離インタフェースアドレス、Bの「遠距離」インタフェースアドレス、Cの順にpingを試みます。ただ一般を使用してくださいping <addr>
。動作が停止する場所を確認してください(すぐに機能しない場合)。
デバッグするには、tcpdump
4つのインターフェイスすべての4つの端末で実行してください。ネットワークネームスペースで1つ以上を実行すると、xterm
デバッグと設定が簡単になります。
それでも機能しない場合は、機能しているpingと機能しないpingのtcpdump出力を含む、上記の設定で実行したすべてのコマンドを含む新しい質問をします。 (Q&AによるリモートデバッグはPITAです。)