在iptables中設置NAT(網絡地址轉換)表,可以按照以下步驟進行:
首先,建議清空現有的iptables規則,以避免沖突。
sudo iptables -F
sudo iptables -t nat -F
為INPUT、OUTPUT和FORWARD鏈設置默認策略。通常,INPUT和FORWARD鏈的默認策略設置為DROP,OUTPUT鏈的默認策略設置為ACCEPT。
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
允許本地回環接口(lo)的流量。
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
允許已建立的連接和相關流量通過。
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
如果你想將內部網絡的私有IP地址轉換為公共IP地址,可以使用SNAT。假設你的內部網絡是192.168.1.0/24,公共IP地址是203.0.113.1。
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.1
其中,eth0
是你的外部網絡接口。
如果你想將到達特定公共IP地址和端口的流量重定向到內部網絡的某個主機和端口,可以使用DNAT。例如,將到達203.0.113.1:80的流量重定向到192.168.1.100:8080。
sudo iptables -t nat -A PREROUTING -d 203.0.113.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080
iptables規則在系統重啟后會丟失,因此需要保存規則。不同的Linux發行版有不同的保存方法。
sudo sh -c "iptables-save > /etc/iptables/rules.v4"
sudo service iptables save
或者使用firewall-cmd
(如果你使用的是firewalld):
sudo firewall-cmd --runtime-to-permanent
如果你啟用了IP轉發,確保內核參數net.ipv4.ip_forward
設置為1。
sudo sysctl -w net.ipv4.ip_forward=1
為了使這個設置在重啟后仍然有效,可以編輯/etc/sysctl.conf
文件,添加或修改以下行:
net.ipv4.ip_forward=1
最后,驗證你的iptables規則是否正確設置。
sudo iptables -L -v -n
sudo iptables -t nat -L -v -n
通過以上步驟,你應該能夠成功設置iptables中的NAT表。