2009年6月15日月曜日

社内検証LANをLinuxのiptablesでマスカレード

社内に検証用のLANを作ったとして、既存のLANにはくっつけたくないけど、ネットには繋ぎたいなという環境。
 

NIC2枚ざしのLinuxサーバを1台使って、検証用ネットワークをマスカレードしてしまうには、1行のiptablesルールでOKだったりする。
※使ったのはCentOS5.3でiptables は v1.3.5
 

接続としてはこんな感じ。
┼────┼
│Internet│
┼────┼

│ 社内LAN:192.168.1.0/24
├─┬──────



│eth0:192.168.1.10
┼───────┼
│ルータ用Linux │
┼───────┼
│eth1:10.48.1.254

│ 検証LAN:10.48.1.0/24
├────

 
 


事前にipv4のフォワードを有効にしておく必要があるので、 "/etc/sysctl/conf" を修正して再起動。
# Controls IP packet forwarding
#net.ipv4.ip_forward = 0
net.ipv4.ip_forward = 1

 

で、iptablesのルールを作成。

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
natテーブルのPOSTROUTINGチェインにルールを1つ、これでとりあえずマスカレードしてくれるようだ。
インターフェイスは環境によるので適宜書き換え、出る際のルールなので外側に。
 

FTPとかはPassiveを使わないと無理だろうけど、とりあえずで設定するなら簡単でいい。
 


ルールを出すとこんな感じ
# iptables -v -L -t nat
Chain PREROUTING (policy ACCEPT 573 packets, 67730 bytes)
pkts bytes target prot opt in out source destination
 
Chain POSTROUTING (policy ACCEPT 333 packets, 26739 bytes)
pkts bytes target prot opt in out source destination
12 861 MASQUERADE all -- any eth0 anywhere anywhere
 
Chain OUTPUT (policy ACCEPT 377 packets, 29918 bytes)
pkts bytes target prot opt in out source destination

 
 

不都合あったらルールに追記するって事で、とりあえず完了。
 

出来ない場合、 lsmod で ipt_MASQUERADE があるか確認。