LinuxをPPPoEを利用したルータとして使用する際のiptalesのパケットフォワーディングで引っかかった事がありましたのでメモしておきます。
【環境(例)】
PC1は、IPアドレス192.168.111.123。これをグローバルアドレスのクライアントPCと仮定。
SV1は、IPアドレス192.168.222.234。これも便宜上グローバルアドレスとします。これはインターネット接続しているサーバPCでiptablesコマンドでパケットフィルタリングしている。
192.168.222.234はNIC(ネットワークカード)が2枚あり、192.168.222.234はeth0。eth1を192.168.0.234としてLANに接続。
LSV1は、IPアドレス192.168.0.100。Webサーバとしてが設定されている。
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8100 -j DNAT --to-destination 192.168.0.100:80
iptables -t filter -A FORWARD -p tcp -s 192.168.100.123 -d 192.168.0.100 --dport 80 -j ACCEPT
注意が必要なのは、PPPoEで接続している場合です。
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8100 -j DNAT --to-destination 192.168.0.100:80
の様に、-i デバイス名での指定では、パケットは通過しません。PPPoEの場合は、eth0の部分をppp0とします。または、デバイス名ではなく、SV1のインターネット側のIPアドレスを指定します。
したがって、
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 8100 -j DNAT --to-destination 192.168.0.100:80
または、
iptables -t nat -A PREROUTING -d 192.168.222.234 -p tcp --dport 8100 -j DNAT --to-destination 192.168.0.100:80
と変更する必要があります。
設定前にifconfigで情報をみると、eth0も処理されたパケットの欄に数値があり、そのまま設定が利用できそうだと思いこみ気づくまでに時間が掛かりました。これは、ppp0はeth0のシンボリックリンクの様なものだと勝手に思っていたのが違っていた・・・という感じが、ニュアンスが近いのでしょうか。
iptablesのパケットフォワーディングの設定が、Webの様のもっと確認が簡単だとよいのですが、確認が少々面倒です。iptalbesをエミュレーションするパケットフィルタリング学習ツールの様なものがあると便利だと思いますが、オープンソースやフリーででてないものでしょうか。
【環境(例)】
PC1は、IPアドレス192.168.111.123。これをグローバルアドレスのクライアントPCと仮定。
SV1は、IPアドレス192.168.222.234。これも便宜上グローバルアドレスとします。これはインターネット接続しているサーバPCでiptablesコマンドでパケットフィルタリングしている。
192.168.222.234はNIC(ネットワークカード)が2枚あり、192.168.222.234はeth0。eth1を192.168.0.234としてLANに接続。
LSV1は、IPアドレス192.168.0.100。Webサーバとしてが設定されている。
■ PC1
192.168.111.123
|
[インターネット]
|
eth0: 192.168.222.234
■ SV1
eth1: 192.168.0.234
|
[ LAN ]
|
192.168.0.100
■ LSV1
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8100 -j DNAT --to-destination 192.168.0.100:80
iptables -t filter -A FORWARD -p tcp -s 192.168.100.123 -d 192.168.0.100 --dport 80 -j ACCEPT
注意が必要なのは、PPPoEで接続している場合です。
■ PC1
192.168.111.123
|
[インターネット]
|
ppp0: 192.168.222.234 / eth0:
■ SV1
eth1: 192.168.0.234
|
[ LAN ]
|
192.168.0.100
■ LSV1
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8100 -j DNAT --to-destination 192.168.0.100:80
の様に、-i デバイス名での指定では、パケットは通過しません。PPPoEの場合は、eth0の部分をppp0とします。または、デバイス名ではなく、SV1のインターネット側のIPアドレスを指定します。
したがって、
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 8100 -j DNAT --to-destination 192.168.0.100:80
または、
iptables -t nat -A PREROUTING -d 192.168.222.234 -p tcp --dport 8100 -j DNAT --to-destination 192.168.0.100:80
と変更する必要があります。
設定前にifconfigで情報をみると、eth0も処理されたパケットの欄に数値があり、そのまま設定が利用できそうだと思いこみ気づくまでに時間が掛かりました。これは、ppp0はeth0のシンボリックリンクの様なものだと勝手に思っていたのが違っていた・・・という感じが、ニュアンスが近いのでしょうか。
iptablesのパケットフォワーディングの設定が、Webの様のもっと確認が簡単だとよいのですが、確認が少々面倒です。iptalbesをエミュレーションするパケットフィルタリング学習ツールの様なものがあると便利だと思いますが、オープンソースやフリーででてないものでしょうか。





