之前在研究 IPsec 的時候
都馬是網頁寫什麼就抄什麼
這個有理也會通就沒特別追究其他問題了
然後也不知道哪裡抄來的 iptables 設定
hmmm….沒問題,但就是哪裡怪怪的
沒問題就先這樣吧
先來看看我遇到的狀況
NAT 跟 IPsec 在同一台
iptables 長這樣 (遮臉)
iptables -t nat -A POSTROUTING -o eth0 -s 10.6.0.0/16 -j MASQUERADE
hmmm…這 VPC 下的機器可以連外
也可以連到其他 VPC
看似沒問題
但是連到其他 VPC 機器為什麼顯示的 ip 是這台 NAT + IPsec 的 ip ?
可是拿掉這段 iptables 設定,VPC 就無法連外了啊~~~~
所以看起來奇怪,還是先放著吧
過了幾個月,最近在弄服務偵測,需要動防火牆讓某些 monitor server ip 可以連過來
可是連不到,發現他是用上面的方式連線的時候,決定要來追一下問題
問題就出在 iptable POSTROUTING 部分寫錯了
NAT server 才需要將 ip 偽裝後連出去,而 ipsec 互連的部分卻不用
因為我的設定錯誤,導致以上的錯誤 T______T
那如果 NAT + IPsec 弄在一起呢
就讓 destination 不是 VPC 的網段被偽裝就好
例如
iptables -t nat -A POSTROUTING -o eth0 ! -d 10.0.0.0/8 -j MASQUERADE
不是通往 10.0.0.0/8 的都被偽裝
hmmm….成功了
可是我們家有很奇怪的兩個網段耶 (該死的 AWS EC2 Classic)
iptables 無法支援 multi destination ,所以寫成 10.0.0.0/8, 172.31.0.0/16 之類的都無法
幸好有鄉民指點迷津,在這邊說了一個方法
iptables -t nat -N NETMAP_dest iptables -t nat -A NETMAP_dest -d 10.0.0.0/8 -j RETURN iptables -t nat -A NETMAP_dest -d 172.31.0.0/16 -j RETURN iptables -t nat -A NETMAP_dest -j MASQUERADE iptables -t nat -A POSTROUTING -o eth0 -j NETMAP_dest
利用 chain 的方式判斷,是否偽裝 ip
經證實可以使用,實在高明
也讓我的網管能力更上一層樓 (一樓到二樓 ? xd)
多錯多學
才能了解錯在哪