ネットワークネームスペース()とリンクペアip netns add
も作成しました。ルートネームスペースの物理リンクはと呼ばれます。ルートネームスペースと新しく作成されたネームスペースにあります。veth
virt-a
virt-b
eth0
virt-a
virt-b
IPアドレス:
eth0: 192.168.1.100/24
virt-a: 192.168.1.101/24
virt-b: 192.168.1.102/24
ルートネームスペースのルーティングテーブル:
default via 192.168.1.1 dev eth0
192.168.1.102 dev virt-a proto kernel scope link src 192.168.1.101
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
新しい名前空間のルーティングテーブル:
default dev virt-b scope link src 192.168.1.102
ルートネームスペースで192.168.1.102をpingでき、新しいネームスペースで192.168.1.100と192.168.1.101をpingできます。ただし、LAN(たとえば、192.168.1.1)内の他の物理システムをpingすることはできません。
を使用して着信パケットをルートネームスペースに書き込むiptables -t raw -A PREROUTING -i virt-a -j LOG --log-prefix "[raw-PRE] " --log-level 7
が、ルートネームスペースにパケットが入らない。
vethまたは名前空間についてどのような誤解がありますか?
編集する:
私はvethがどのように動作するか誤解したと思います。ルートネームスペースにブリッジを作成し、2つのネームスペースのマスターにすることで、新しいネームスペースから外部デバイスをpingできますeth0
。virt-a
なぜこれですか? 2つの物理ネットワークカードがあり、一方から着信トラフィックを受信している場合は、ブリッジなしで別のカードに転送できます。 vethも同じように動作しないのですか?
iprouteのさまざまな種類のリンクについてもっと学ぶことができる場所はありますか?文書の検索に問題があります。
答え1
誤解は、ネットワークの名前空間ではなく、ルーティングに関するものです。その他IPv4ネットワーク。
ここでは、同じネットワークに属するIPをルーティングしようとしています。 from 192.168.1.0/24
to 192.168.1.0/24
:テストケースに適していない特別な設定(プロキシarpなど)が指定されていない限り、まったくルーティングされません。
192.168.2.0/24
veth-*ネットワークなどの他のIP LANを使用してください。また、ネットワークネームスペースのパスは、「デバイス」だけでなく、veth-aのIPもデフォルトゲートウェイとして使用する必要があります。外部システムが他のプライベートネットワークについて知らなくても正しく対話できるように、iptablesを使用してNATルールを追加してIP転送を有効にすることもできます。