Debian Router 化計画
Debian Router/Gateway in 15 Minutes – The Novian Blogによれば、iptables を使うと、IPマスカレードするように設定できるらしい。ということでやってみる。
- ルーターにしたい Debian に 2 つの NIC を設定
- /etc/sysctrl.conf で net.ipv4.ip_forward=1 の行のコメントを外し、IP forward を有効にする
- iptables -t nat -A POSTROUTING -s $INTERNAL_IP_SUBNET -j MASQUERADE
- iptables-save -c > /etc/iptables.rules
- /etc/network/interfaces を編集
/etc/network/interfaces は以下のようにした。
auto eth1 iface eth1 inet static address 192.168.1.237 netmask 255.255.255.0 pre-up iptables-restore < /etc/iptables.rules auto eth2 iface eth2 inet static address 192.168.2.237 netmask 255.255.255.0
普通に IP_Forward するだけであれば、送信元の IP は変更されずにサーバーに到達する。しかし、IP マスカレードの場合は、上記の eth2 のアドレスに NAT されてサーバーに到達、サーバーは NAT されたアドレスに応答を返す動作になる。192.168.1.0/24 のクライアントから 192.168.2.233 宛にリクエストを出したときのパケットは以下。
3 3.737183 192.168.2.237 -> 192.168.2.233 TCP 74 53658→8080 [SYN] Seq=0 Win=14600 Len=0 MSS=1460 SACK_PERM=1 TSval=1130073 TSecr=0 WS=16 4 3.737205 192.168.2.233 -> 192.168.2.237 TCP 74 8080→53658 [SYN, ACK] Seq=0 Ack=1 Win=14480 Len=0 MSS=1460 SACK_PERM=1 TSval=1121756 TSecr=1130073 WS=16 5 3.737290 192.168.2.237 -> 192.168.2.233 TCP 66 53658→8080 [ACK] Seq=1 Ack=1 Win=14608 Len=0 TSval=1130073 TSecr=1121756 6 3.737344 192.168.2.237 -> 192.168.2.233 HTTP 148 GET / HTTP/1.1 7 3.737351 192.168.2.233 -> 192.168.2.237 TCP 66 8080→53658 [ACK] Seq=1 Ack=83 Win=14480 Len=0 TSval=1121756 TSecr=1130073 8 3.738963 192.168.2.233 -> 192.168.2.237 HTTP 316 HTTP/1.1 200 OK (text/html) 9 3.739046 192.168.2.237 -> 192.168.2.233 TCP 66 53658→8080 [ACK] Seq=83 Ack=251 Win=15680 Len=0 TSval=1130074 TSecr=1121756 10 3.739236 192.168.2.237 -> 192.168.2.233 TCP 66 53658→8080 [FIN, ACK] Seq=83 Ack=251 Win=15680 Len=0 TSval=1130074 TSecr=1121756 11 3.739547 192.168.2.233 -> 192.168.2.237 TCP 66 8080→53658 [FIN, ACK] Seq=251 Ack=84 Win=14480 Len=0 TSval=1121757 TSecr=1130074 12 3.739625 192.168.2.237 -> 192.168.2.233 TCP 66 53658→8080 [ACK] Seq=84 Ack=252 Win=15680 Len=0 TSval=1130074 TSecr=1121757
192.168.1.0/24 からでなく、192.168.2.237 から SYN が来ている。ここがグローバルアドレスになっていれば、ルーターと同じ・・・はず。