Linux をブロードバンドルータ化する
Linux を インターネットへ接続するゲートウェイサーバとし、複数の PC で1つのインターネット接続を共有する方法について説明します。
IP マスカレード
クライアントPCのローカルアドレス(ex: 192.168.0.2)を、LINUX BOX のグローバルアドレスに変換することで、外部との通信を可能とします。外部からは、あたかも LINUX マシンがアクセスしているように見えます。ここでは、便宜上インターネット側の NIC を ppp0、LAN側の NIC を eth1 として説明します。
・まず /etc/sysctl.conf を編集し、IP転送を有効にしておきます。
net.ipv4.ip_forward = 0 ↓ net.ipv4.ip_forward = 1
・ネットワークを再起動します。
$ /etc/rc.d/init.d/network restart
・コマンドラインで確認。「1」が表示されればOK。
$ cat /proc/sys/net/ipv4/ip_forward 1
NAT(IP_MASQUERADE)の設定
POSTROUTING チェインに以下のコマンドでマスカレードを設定します。送信元がローカルアドレス 192.168.0.0/24 で、ppp0 から出て行くパケットを ppp0 に接続しているグローバルアドレスに書き換えます。
$ iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE
また、クライアントPCからLINUX マシン を通過するパケットと、それに関連するパケットを許可します。
$ iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT $ iptables -A FORWARD -d 192.168.0.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT
DNATの場合
ファイアウォールの内側にあるホストへパケットを転送したいときに使用します。P2P サービスやオンラインゲームで遊ぶときなど、使用するポートの開放とともに、この宛先NATの設定を行う必要があります。
## DMZ にあるHTTP サーバへパケットを転送する $ iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 80 -j DNAT --to 192.168.0.12:80 $ iptables -A FORWARD -p tcp --dport 80 -i ppp0 -j ACCEPT
ppp0 から入ってきた宛先がポート80(HTTP) のパケットを LAN内の webサーバ 192.168.0.12 へ流す。また、ppp0 から入ってくる宛先がポート80 のパケットがルータサーバを通過することを許可する。
Path MTU Discovery Black Hole
フレッツADSLやBフレッツ などPPPoE環境では、特定webサイトにアクセスできなかったり、表示に時間がかかるなどの現象が発生することがあります。(Path MTU Discovery Black hole 問題) これを回避するためには次のルールを適用します。
$ iptables -A FORWARD -o ppp0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
フィルタリングルールの保存
iptables-save で現在の設定を /etc/sysconfig/iptables に保存します。サーバ再起動時にはこのファイルが読み込まれ、ファイアウォールルールが適用されます。
$ iptables-save > /etc/sysconfig/iptables