閑來無事,今天測試了下列指令。
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
# 如下指令表示把所有10.8.0.0網段的資料包
# SNAT成網卡eth0的ip然後發出去
# MASQUERADE會自動讀取eth0現在的ip位址然後做SNAT出去,
# 這樣就實作了很好的動态SNAT位址轉換。
上述指令中MASQUERADE,位址僞裝,算是snat中的一種特例,可以實作自動化的snat。
但是我使用iptables -L,啥結果沒有,增加失敗了嗎?
原來不是如此,正确的指令是
iptables -L -t nat
使用-L, --list 選型可以列出目前防火牆規則,但是需要使用-t,--table指令選項來指定合适的Netfilter表,共有五種,分别為:filter(預設default), nat, mangle, raw 和 security。
iptables --table nat --list
或者使用下列簡短形式也行:
iptables -t nat -L
假如沒有指定特定表,那麼預設表就是filter。
為了避免DNS查詢等待,可以使用-n、--numeric選項,直接列印IP位址而不是主機名。
假如需要删除增加的規則,那麼使用下列指令即可,簡單的加-A替換為-D選項即可:
iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
使用-v選項可以檢視詳細資訊:
iptables -vL -t filter
iptables -vL -t nat
iptables -vL -t mangle
iptables -vL -t raw
iptables -vL -t security
iptables參考圖: