底辺でもがくITエンジニア
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
LinuxをホストとしてNICを2枚用意する。
その上で1枚目のNICを通して2枚目のNICを橋渡しします。
その際不必要なパケットをなるべく破棄する、またはパケット状況を監視するサーバを構築してみたいと思います。
通常はNICを2枚用意するのでノートブックでは実現性が薄いですし、ほぼルータとしての役割を果たすことになるのでNICの向こうで作業を行う場合、連動して稼動している必要があります。
ですので、実稼動させる環境は個人ではさほど無いと思いますが、機能があるなら何かの役に立つと思いますし、やってみようよ、ってところでしょうか。
その上で1枚目のNICを通して2枚目のNICを橋渡しします。
その際不必要なパケットをなるべく破棄する、またはパケット状況を監視するサーバを構築してみたいと思います。
通常はNICを2枚用意するのでノートブックでは実現性が薄いですし、ほぼルータとしての役割を果たすことになるのでNICの向こうで作業を行う場合、連動して稼動している必要があります。
ですので、実稼動させる環境は個人ではさほど無いと思いますが、機能があるなら何かの役に立つと思いますし、やってみようよ、ってところでしょうか。
今回の検証ではVMWareにて検証したので物理NICではうまく行くわかりません。
しかしながら、VMWare社の製品のネットワーク技術の仮想化には目を見張るものがあり、信用に値すると思います。
NICを2枚用意するので仮想環境では仮想PCに2枚NICの設定を行っておきます。
今回の対象はLinuxです。
検証環境はUbuntuServer8.10ですが、iptablesを使うのでRedHat系でも問題ないでしょう。
もちろんDebianもいけると思います。
行うことはいたって簡単で、ファイアウォールサーバに以下のコマンドを投入するだけです。
SOURCE_IP=192.168.0.0/24
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -o eth0 -s ${SOURCE_IP} -j MASQUERADE
/sbin/iptables -t nat -A POSTROUTING -o eth1 -s ${SOURCE_IP} -j MASQUERADE
NIC間パケット転送制御は「ip_forward」にて0か1で制御するそうです。
0で遮断、1で透過です。
今回はNIC間どうしでパケットの往来があるので1を投入します。
または「sysctl -w net.ipv4.ip_forward=1」としても実現できます。
この方がコマンドですし、しっくり来るかもしれませんね。
次にiptablesの設定ですが、eth0のネットワークに接続されているノードに対してパケットを送信する場合はeth0からパケットが再送信される形に持って行かないといけません。
送信元がeth1セグメントのノードであってもeth0セグメントからみるとeth0からパケットが飛んでくるので。
よくわかんないけどたぶんそういうことだと思う(←適当)。
2行書いてあるのはどちらからも対応させるためです。
まぁ、かなり適当に書いていますが
、色々なサイトを参考にしてもよく理解できないんですよね。。。
今回eth0セグメント、eth1セグメント同じネットワークセグメントですが、マスカレードは必要です。
その為、違うセグメントでも行うことはまったく一緒です。
多くのサイトではここまでの解説しかありません。
ですので、付加情報はあれこれ記載はされていますが、iptablesの使い方の延長線上です。
実際にこれだけで構築できるのかもしれませんが、今回はプラスルーティングが必要になり、答えに結びつくまでにだいぶ頭を使ったので記載しておきます。
まず、ファイアウォールサーバのデフォルトゲートウェイがeth0側、および無設定の場合。
パケットの送信にはデフォルトでeth0を使います。
その為、他のノードと通信を図る場合、eth0を使おうとします。
ですので、eth1セグメントのノードにping送信しても「Destination Unreachable」となります。
それどころかeth1にpingを飛ばしても届きません。
自ホストにあるのに・・・
なのでそれぞれのNICのノードと通信をするためどちらのNICにどのようなノード(IPアドレス)があるのかを明確にします(ルーティング)。
ETH0_IP=192.168.0.1
ETH1_IP=192.168.0.129
ETH0_NETWORK=192.168.0.0
ETH1_NETWORK=192.168.0.128
CMD=/sbin/route
${CMD} add -net ${ETH1_IP} netmask 255.255.255.255 gw ${ETH1_IP} eth1
${CMD} add -net ${ETH0_NETWORK} netmask 255.255.255.128 gw ${ETH0_IP} eth0
${CMD} add -net ${ETH1_NETWORK} netmask 255.255.255.128 gw ${ETH1_IP} eth1
上記はeth0に接続されているノードは192.168.0.0/25で
eth1に接続されているノードが192.168.0.128/25の場合です。
同一セグメントですが、別セグメントであればnetmaskは255.255.255.0でよいと思います。
eth1へのルーティングはETH1_NETWORKに含んでいるので必須ではありません。
これでファイアウォールサーバからは各NIC配下の全ノードに対し通信が可能なはず。
次にクライアントの設定です(しんどい
)。
今回はETH1_NETWORKもETH0_NETWORKも同一セグメントです。
ですので多くの場合はこのセグメントから出るためにデフォルトゲートウェイが別にあるのではないでしょうか。
(わざわざ同一セグメントのルーティングをするためにデフォルトゲートウェイを使っているとは思えない。)
その場合はこの設定だけではファイアウォールの先のノードに到達できません(でした)。
windowsの場合
ROUTE -F
SET LOCALHOST=192.168.0.2
SET ROUTER=192.168.0.126
SET GATEWAY=192.168.0.1
ROUTE ADD 192.168.12.0 MASK 255.255.255.128 %LOCALHOST% METRIC 10
ROUTE ADD 192.168.12.128 MASK 255.255.255.128 %GATEWAY% METRIC 10
ROUTE ADD 0.0.0.0 MASK 0.0.0.0 %ROUTER% METRIC 10
Linuxの場合
LOCALHOST=192.168.0.130
GATEWAY=192.168.0.129
route add -net 192.168.0.0 netmask 255.255.255.128 gw ${GATEWAY} metric 10 dev eth0
route add -net 192.168.0.128 netmask 255.255.255.128 gw ${LOCALHOST} metric 10 dev eth0
route add -net 0.0.0.0 netmask 0.0.0.0 gw ${GATEWAY} metric 10 dev eth0
上記のように設定すれば、全てのノードで問題なく稼動すると思います。
windowsの例はETH0_NETWORKに属する場合の設定。
Linuxの例はETH1_NETWORKに属する場合の設定です。
尚WANや、他のセグメントに移動するためのデフォルトゲートウェイがETH0_NETWORKに属している場合になります。
次回、があればファイアウォールサーバのiptablesについて触れようと思います。
しかしながら、VMWare社の製品のネットワーク技術の仮想化には目を見張るものがあり、信用に値すると思います。
NICを2枚用意するので仮想環境では仮想PCに2枚NICの設定を行っておきます。
今回の対象はLinuxです。
検証環境はUbuntuServer8.10ですが、iptablesを使うのでRedHat系でも問題ないでしょう。
もちろんDebianもいけると思います。
行うことはいたって簡単で、ファイアウォールサーバに以下のコマンドを投入するだけです。
SOURCE_IP=192.168.0.0/24
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -o eth0 -s ${SOURCE_IP} -j MASQUERADE
/sbin/iptables -t nat -A POSTROUTING -o eth1 -s ${SOURCE_IP} -j MASQUERADE
NIC間パケット転送制御は「ip_forward」にて0か1で制御するそうです。
0で遮断、1で透過です。
今回はNIC間どうしでパケットの往来があるので1を投入します。
または「sysctl -w net.ipv4.ip_forward=1」としても実現できます。
この方がコマンドですし、しっくり来るかもしれませんね。
次にiptablesの設定ですが、eth0のネットワークに接続されているノードに対してパケットを送信する場合はeth0からパケットが再送信される形に持って行かないといけません。
送信元がeth1セグメントのノードであってもeth0セグメントからみるとeth0からパケットが飛んでくるので。
よくわかんないけどたぶんそういうことだと思う(←適当)。
2行書いてあるのはどちらからも対応させるためです。
まぁ、かなり適当に書いていますが

今回eth0セグメント、eth1セグメント同じネットワークセグメントですが、マスカレードは必要です。
その為、違うセグメントでも行うことはまったく一緒です。
多くのサイトではここまでの解説しかありません。
ですので、付加情報はあれこれ記載はされていますが、iptablesの使い方の延長線上です。
実際にこれだけで構築できるのかもしれませんが、今回はプラスルーティングが必要になり、答えに結びつくまでにだいぶ頭を使ったので記載しておきます。
まず、ファイアウォールサーバのデフォルトゲートウェイがeth0側、および無設定の場合。
パケットの送信にはデフォルトでeth0を使います。
その為、他のノードと通信を図る場合、eth0を使おうとします。
ですので、eth1セグメントのノードにping送信しても「Destination Unreachable」となります。
それどころかeth1にpingを飛ばしても届きません。
自ホストにあるのに・・・
なのでそれぞれのNICのノードと通信をするためどちらのNICにどのようなノード(IPアドレス)があるのかを明確にします(ルーティング)。
ETH0_IP=192.168.0.1
ETH1_IP=192.168.0.129
ETH0_NETWORK=192.168.0.0
ETH1_NETWORK=192.168.0.128
CMD=/sbin/route
${CMD} add -net ${ETH1_IP} netmask 255.255.255.255 gw ${ETH1_IP} eth1
${CMD} add -net ${ETH0_NETWORK} netmask 255.255.255.128 gw ${ETH0_IP} eth0
${CMD} add -net ${ETH1_NETWORK} netmask 255.255.255.128 gw ${ETH1_IP} eth1
上記はeth0に接続されているノードは192.168.0.0/25で
eth1に接続されているノードが192.168.0.128/25の場合です。
同一セグメントですが、別セグメントであればnetmaskは255.255.255.0でよいと思います。
eth1へのルーティングはETH1_NETWORKに含んでいるので必須ではありません。
これでファイアウォールサーバからは各NIC配下の全ノードに対し通信が可能なはず。
次にクライアントの設定です(しんどい

今回はETH1_NETWORKもETH0_NETWORKも同一セグメントです。
ですので多くの場合はこのセグメントから出るためにデフォルトゲートウェイが別にあるのではないでしょうか。
(わざわざ同一セグメントのルーティングをするためにデフォルトゲートウェイを使っているとは思えない。)
その場合はこの設定だけではファイアウォールの先のノードに到達できません(でした)。
windowsの場合
ROUTE -F
SET LOCALHOST=192.168.0.2
SET ROUTER=192.168.0.126
SET GATEWAY=192.168.0.1
ROUTE ADD 192.168.12.0 MASK 255.255.255.128 %LOCALHOST% METRIC 10
ROUTE ADD 192.168.12.128 MASK 255.255.255.128 %GATEWAY% METRIC 10
ROUTE ADD 0.0.0.0 MASK 0.0.0.0 %ROUTER% METRIC 10
Linuxの場合
LOCALHOST=192.168.0.130
GATEWAY=192.168.0.129
route add -net 192.168.0.0 netmask 255.255.255.128 gw ${GATEWAY} metric 10 dev eth0
route add -net 192.168.0.128 netmask 255.255.255.128 gw ${LOCALHOST} metric 10 dev eth0
route add -net 0.0.0.0 netmask 0.0.0.0 gw ${GATEWAY} metric 10 dev eth0
上記のように設定すれば、全てのノードで問題なく稼動すると思います。
windowsの例はETH0_NETWORKに属する場合の設定。
Linuxの例はETH1_NETWORKに属する場合の設定です。
尚WANや、他のセグメントに移動するためのデフォルトゲートウェイがETH0_NETWORKに属している場合になります。
次回、があればファイアウォールサーバのiptablesについて触れようと思います。
PR
この記事にコメントする