少しコーディングする準備ができているなら、これを試すことができます:
- システムコールの
CLONE_NEWNET
フラグを使用するclone
か、ip netns add
およびip netns exec
コマンドを使用して、新しいネットワーク名前空間を作成します。
- この名前空間では、
tun
ドライバーまたはを使用して仮想ネットワークインターフェイスのセットを作成しますip link add
。
- を使用して構成をロードします
iptables-restore
tun
またはveth
デバイスを通じて多数のパケットをルールにフィードします
tun
またはveth
デバイスから正しいパケットを取得していることを確認します
このアプローチは、転送されたパケットのルールをテストするのに最適です。iptablesが使用されているマシンとの接続にはもう少し手間がかかりますが、この方法でテストすることも可能です。
使用できる一連のコマンドの例を次に示します。
ip netns add test-iptables
ip netns add test-iptables-some-guy-on-the-internet
ip netns add test-iptables-lan-host
ip netns exec test-iptables ip link add eth0 type veth peer name eth0-peer
ip netns exec test-iptables ip link set eth0-peer netns test-iptables-some-guy-on-the-internet
ip netns exec test-iptables ip link add eth1 type veth peer name eth1-peer
ip netns exec test-iptables ip link set eth1-peer netns test-iptables-lan-host
ip netns exec test-iptables ifconfig eth0 192.0.2.2 netmask 255.255.255.0
ip netns exec test-iptables ifconfig eth1 203.0.113.1 netmask 255.255.255.0
ip netns exec test-iptables-some-guy-on-the-internet ifconfig eth0-peer 192.0.2.1 netmask 255.255.255.0
ip netns exec test-iptables-some-guy-on-the-internet route add default gateway 192.0.2.2
ip netns exec test-iptables-lan-host ifconfig eth1-peer 203.0.113.2 netmask 255.255.255.0
ip netns exec test-iptables-lan-host route add default gateway 203.0.113.1
ip netns exec test-iptables-some-guy-on-the-internet telnet 203.0.113.2
ip netns exec test-iptables iptables-restore < /tmp/iptables-test
ip netns exec test-iptables-some-guy-on-the-internet telnet 203.0.113.2
ip netns del test-iptables
ip netns del test-iptables-some-guy-on-the-internet
ip netns del test-iptables-lan-host
これにより、テスト用の3つのネットワーク名前空間が作成され、その中のiptablesルールのセットがロードされます。他の2つは、インターネット上の誰かとLAN上のホストの役割を果たします。
上記の例では、最初のtelnet
コマンドはtest-iptables-lan-host
ネームスペースからの接続拒否をtelnet
取得し、2番目のコマンドはルールセットがパケットをドロップするとタイムアウトを取得します。
これは初期のネットワーク名前空間には影響しません。初期の名前空間は、デフォルトですべてのプロダクションが行われる名前空間です。本番環境からさらに分離する唯一の方法は、別のホスト(物理または仮想)で実行することです。