Linuxサーバー(Ubuntu 16.04、カーネル4.13)と複数のガジェットを含む物理ネットワークがあります。すべてのガジェットに同じ192.168.0.222/24 など、変更できない固定 IP です。 ICMP pingやカスタムUDPプロトコルなど、任意のIPプロトコルを介してこれらのガジェットと通信したいと思います。
幸いなことに、サーバーとガジェットを接続するマネージドネットワークスイッチがあります。サーバー用のトランクポートと各ガジェットのアクセスポートをそれぞれ異なるVLAN(VID 11、12など)に持つようにスイッチを設定しました。
/etc/modulesに追加し、8021q
/etc/network/interfacesにVLANエントリを設定しました。
auto eno2 # For switch management interface
iface eno2 inet static
address 192.168.2.2/24
auto eno2.11 # Gadget 1 (only)
iface eno2 inet static
address 192.168.0.1/24
#auto eno2.12 # Gadget 2 - disabled
#iface eno2 inet static
# address 192.168.0.1/24
上記のエントリを使用すると、Gadget 1(たとえばping 192.168.0.222
)と通信でき、Gadget 2からのトラフィックは表示されません。
しかし、私は同時にすべてのデバイスと通信し、互いに区別できるようにしたいと思います。彼らはお互いに話す必要はありません。各ガジェットに固有のホストIPとサブネットを作成したいです。
Host IP & subnet "Fake" gadget IP Actual gadget IP VLAN Interface
192.168.101.1/24 192.168.101.222 192.168.0.222 eno2.11
192.168.102.1/24 192.168.102.222 192.168.0.222 eno2.12
私は各方向に翻訳を使用iptables
またはnftables
処理します。その後、ping 192.168.101.222
ガジェット1に到達してガジェット2に到達できますping 192.168.102.222
。各ガジェットの観点からは、独自のIPはまだ192.168.0.222であり、192.168.0.1のICMPエコー要求を確認します。
これはNATの珍しい変形のようです。 「偽」IPを含むトラフィックはサーバーを離れる必要はなく、出てはいけません。我々は、そのトラフィックをネットワーク内の他の場所に転送しません。
- これが問題を解決する合理的な方法ですか?
- これを達成するには、/etc/network/interfacesとiptablesまたはnftablesをどのように設定しますか?
ベストアンサー1
はい、これは合理的です。
残念ながら、Linux DNAT(「Destination Rewrite NAT」)は次のように制限されています。事前ルーティングチェーン。あなたの場合、これは次のことを意味するので、PITAです。
(ㅏ)。サーバーにDNATがありますが、このアドレスのみを使用できます。外部サーバー自体ではなくサーバー。
(b)ネットワークネームスペースを作成し、veth-pairを使用してネットワークネームスペースをサーバーのデフォルトネームスペースに接続し、ネットワークネームスペース内でDNATを実行して上記の状況を人為的に作成しました。これは、すべてのVLANインターフェイスもネットワークネームスペースに含まれることを意味します。
Linuxネットワーキングの専門家がなぜこのようなことをするのかはわかりませんが、それはまさにそのことです。パケットをオーバーライドする一般的な方法は非常に便利です。
Googleの「ネットワークネームスペース」と「iptables DNAT」は、始めるのに十分です(他の人が私よりもステップバイステップの回答を書く時間がない限り...)。