使用iptables nat將第1台server的80port轉向第2台server的80port

在virtual box中準備2台server,並安裝好 httpd 等服務,啟動 httpd 服務和設定開機啟動

在2台server中的/var/www/html/建立基本頁面index.php,顯示各自主機的名稱

192.168.1.15 顯示以下畫面

192.168.1.16 顯示以下畫面

接下來的動作是要使用 nat 技術將到192.168.1.15的80port封包轉到192.168.1.16

所以輸入192.168.1.15應該會出現”ben server”,而不是出現原本的”halley server”

在192.168.1.16只要設定基本的防護iptables規責

在192.168.1.15的iptables要加入以下設定

echo "1" > /proc/sys/net/ipv4/ip_forward
#echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter

modprobe ip_tables
modprobe ip_nat_ftp
modprobe ip_nat_irc
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc

#disable all chains
iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F

#nat
iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat

iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -A POSTROUTING -p tcp --dport 80 -o eth0 -j MASQUERADE

iptables -A PREROUTING -t nat -i eth0 -p tcp -d 192.168.1.15 --dport 80 -j DNAT --to 192.168.1.16:80
iptables -A FORWARD -p tcp -i eth0 -d 192.168.1.16 --dport 80 -j ACCEPT

注意!在 MASQUERADE 那行,參數不要亂加,之前加了 -s 0.0.0.0 反而無法成功

在halley使用tcpdump

當瀏覽者(192.168.1.5)向192.168.1.15請求資料時,變成192.168.1.15向192.168.1.16請求資料

然後由192.168.1.16回覆給192.168.1.15

再由192.168.1.15回覆給瀏覽者

在ben使用tcpdump

可以看到只有192.168.1.15向192.168.1.16請求

並由192.168.1.16回覆給192.168.1.15

並沒有任何封包直接傳向瀏覽者(192.168.1.5)

結果,現在不管是輸入192.168.1.15或是192.168.1.16都會出現192.168.1.16的資料

最後觀察一下192.168.1.15的nat表