■VMWarePlayerのゲストSqueezeにマスカレード
※全体が内部ネットワークなので。。。
eth0のSqueezeホストはWAN側
WinXPも同WANネットワーク
vmnet8のSqueezeホスト(192.168.72.1)を通って、LAN内のeth0のSqueezeゲストに接続する。
WinXP⇒eth0⇒Squeeze(ホスト)⇒vmnet8⇒Squeeze(ゲスト)
■Squeeze(ホスト)の設定
$ su root -c 'echo 1 > /proc/sys/net/ipv4/ip_forward '
$ sudo iptables -t nat -A POSTROUTING -o vmnet8 -j MASQUERADE
$ sudo iptables -t nat -L | grep -A 2 POSTROUTING
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- anywhere anywhere
$ sudo iptables -t nat -L -n | grep -A 2 POSTROUTING
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0
■WinXPの設定
pingの応答は普通なので載せない。
192.168.188.188 ⇒ Squeeze(ホストのeth0のIP)
192.168.72.0/24 ⇒ Squeeze(ホストのvmnet8のネットワーク)
192.168.72.188 ⇒ Squeeze(ゲストのeth0のIP)
192.168.72.199 ⇒ Squeeze(ゲストのeth0のIP)
> ipconfig | grep 192
IP Address. . . . . . . . . . . . : 192.168.188.155
Default Gateway . . . . . . . . . : 192.168.188.254
> route add 192.168.72.0 mask 255.255.255.0 192.168.188.188
> ping 192.168.72.188
> ping 192.168.72.199
■WinXPにはGowが入っているので、直接ファイルをscp転送してみる。
> scp -P 8822 test.txt labunix@192.168.72.188:/home/labunix
> scp -P 9922 test.txt labunix@192.168.72.199:/home/labunix
■WinXP側では再起動後も有効になるよう、ルーティング設定を保存する
> route --help 2>&1 | grep -A 1 "\-p"
ROUTE [-f] [-p] [command [destination]
[MASK netmask] [gateway] [METRIC metric] [IF interface]
--
-p When used with the ADD command, makes a route persistent across
boots of the system. By default, routes are not preserved
> route -p add 192.168.72.0 mask 255.255.255.0 192.168.188.188
> route print | grep -A 3 Persistent
Persistent Routes:
Network Address Netmask Gateway Address Metric
192.168.72.0 255.255.255.0 192.168.188.188 1
■私の環境はSqueezeホストも内部LANなのでとりあえず制限はゲスト側でかければ良いが、
SRCを制限。
$ sudo iptables -t nat -F
$ sudo iptables -t nat -A POSTROUTING -o vmnet8 -s 192.168.188.0/24 -j MASQUERADE
$ sudo iptables -t nat -L -n | grep -A 2 POSTROUTING
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 192.168.188.0/24 0.0.0.0/0
■DSTも同様に制限
$ sudo iptables -F -t nat
$ sudo iptables -t nat -A POSTROUTING -o vmnet8 -s 192.168.188.0/24 -d 192.168.72.0/24 -j MASQUERADE
$ sudo iptables -t nat -L -n | grep -A 2 POSTROUTING
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 192.168.188.0/24 192.168.72.0/24
■ポートも制限
$ sudo iptables -t nat -A POSTROUTING -o vmnet8 -s 192.168.188.0/24 -d 192.168.72.0/24 -p 9922 -j MASQUERADE
$ sudo iptables -t nat -A POSTROUTING -o vmnet8 -s 192.168.188.0/24 -d 192.168.72.0/24 -p 8822 -j MASQUERADE
$ sudo iptables -t nat -L -n | grep -A 3 POSTROUTING
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE 9922 -- 192.168.188.0/24 192.168.72.0/24
MASQUERADE 8822 -- 192.168.188.0/24 192.168.72.0/24
■私の環境の場合、sshポートはIPに紐付いているので、DSTも固定に出来る。
各ゲストIPの役割(サービス)だけを通す事も出来る。
$ sudo iptables -t nat -A POSTROUTING -o vmnet8 -s 192.168.188.0/24 -d 192.168.72.199 -p 9922 -j MASQUERADE
$ sudo iptables -t nat -A POSTROUTING -o vmnet8 -s 192.168.188.0/24 -d 192.168.72.188 -p 8822 -j MASQUERADE
$ sudo iptables -t nat -L -n | grep -A 3 POSTROUTING
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE 9922 -- 192.168.188.0/24 192.168.72.199
MASQUERADE 8822 -- 192.168.188.0/24 192.168.72.188
■IPv4の有効にする方法は2種類
システム全体でIP転送を有効にする
iptablesのサービス起動時のみ有効にする(iptablesサービス停止時には無効にする)
■「sysctl.conf」を変更する
$ grep ip_forward /etc/sysctl.conf
■iptablesのinitスクリプトで制御する
※gitから持ってきても良いし、コピペしても良い。
sfw(http/smallfirewall_20120408.tar.gz)
http://sourceforge.jp/users/labunix/pf/smallfirewall/files/?action=simple_list
git(git/smallfirewall)
git://git.pf.sourceforge.jp/gitroot/l/la/labunix/smallfirewall.git
■パッケージとの差異
※iptablesへの変換スクリプトがサポートしているのはfilterのみ。
initスクリプトでnatテーブルは削除されるので、nat用のスクリプトを別途用意する必要がある。
$ diff /etc/init.d/iptables /etc/init.d/iptables.20120408_220733
35a36
> echo 0 > /proc/sys/net/ipv4/ip_forward
44a46
> echo 1 > /proc/sys/net/ipv4/ip_forward
53a56
> echo 0 > /proc/sys/net/ipv4/ip_forward
■debian用のinitスクリプト
$ sudo cat /etc/init.d/iptables
set -e
if [ `id -u` -ne "0" ];then
echo "Sorry,Not Permit User!"
exit 1
fi
iptables -V > /dev/null || exit 1
function sfwerr() {
echo $@
iptables -F
iptables -F -t nat
iptables -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
echo 0 > /proc/sys/net/ipv4/ip_forward
exit 1
}
test -f /etc/iptables-save || touch /etc/iptables-save
test -f /etc/iptables-save || sfwerr "ERROR:Please Check /etc/iptables-save"
case $1 in
start)
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables-restore -c /etc/iptables-save || sfwerr "ERROR:Resotre error"
;;
stop)
iptables -F
iptables -F -t nat
iptables -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
echo 0 > /proc/sys/net/ipv4/ip_forward
;;
reload|restart)
iptables-save -c > /etc/iptables-save || sfwerr "ERROR:Save error"
iptables -F
iptables -F t nat
iptables -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables-restore -c /etc/iptables-save || sfwerr "ERROR:Resotre error"
;;
status)
iptables -L -v -n | grep "^Chain"
;;
*)
echo "Usage: $0 {start|stop|reload|restart|status}"
exit 2
;;
esac
exit 0
■IPフォワードの設定の確認(filter設定)
$ sudo /etc/init.d/iptables stop
$ cat /proc/sys/net/ipv4/ip_forward
0
$ sudo /etc/init.d/iptables start
$ sudo cat /proc/sys/net/ipv4/ip_forward
1
$ sudo /bin/bash nat_iptables.sh
■nat設定
filterでICMPブロックしていると通らないのは当然だけど、
切り分けが大変だから、結局smallfirewallがNATに対応しないとダメか〜w。
$ cat nat_iptables.sh
set -e
if [ `id -u` -ne 0 ];then
echo "Not Permit User!"
exit 1
fi
iptables -F -t nat
iptables -t nat -A POSTROUTING -o vmnet8 -s 192.168.188.0/24 -d 192.168.72.0/24 -j MASQUERADE
$ sudo /bin/bash nat_iptables.sh
sudo iptables -L -t nat | grep POSTROUTING -A 2
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 192.168.188.0/24 192.168.72.0/24