Linux
CentOS 6 iptables nat 路由器
我正在嘗試為實驗室設置一個 nat 路由器來模擬連接到 WAN 的專用網路。我有三個虛擬機:
- 公共IP 192.168.0.5/24
- 私有 IP 172.16.0.5/24
- 路由器 192.168.0.1/24 (eth0), 172.16.0.1/24 (eth1)
我從配置每個系統的網路開始,並確認我可以從 private->router 和 back 和 public->router 和 back ping 通。
然後我
net.ipv4.ip_forward
使用 , 設置為 1sysctl.conf
並應用更改。在這一點上,我無法 ping 私人對公共和公共對私人。刷新路由器的 iptables 規則解決了這個問題。
iptables -F iptables -t net -F iptables -t mangle -F iptables -X iptables -t nat -X iptables -t mangle-X
然後按照 CENTOS6/RHEL6 的指南,我發出了這些 iptables 命令來設置轉發
iptables -A FORWARD -i eth1 -j ACCEPT iptables -A FORWARD -o eth1 -j ACCEPT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
混亂開始了。我能夠從私人 ping 到公共,使用 tcp 轉儲我可以確認 IP 地址是正確偽裝的。但是,我也可以從公共 ping 到私人。
這是linux路由器
/etc/sysconfig/iptables
文件的轉儲*mangle :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] COMMIT *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A FORWARD -i eth1 -j ACCEPT -A FORWARD -o eth1 -j ACCEPT COMMIT *nat :PREROUTING ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A POSTROUTING -o eth0 -j MASQUERADE COMMIT
我玩過添加拒絕,輸入狀態相關/建立。我似乎無法阻止所謂的公共主機窺視私有網路。有任何想法嗎?我確定我有什麼問題。
我終於想通了!首先,像以前一樣刷新 iptables:
iptables -F iptables -t net -F iptables -t mangle -F iptables -X iptables -t nat -X iptables -t mangle -X
設置過濾策略
iptables -P OUTPUT ACCEPT iptables -P INPUT ACCEPT iptables -P FORWARD DROP
然後設置偽裝
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
然後設置一個過濾器以防止路由到您的私有介面。這可以防止公共主機將路由器用作網關。沒有這個,我可以從公共 ping 路由器的私有介面。
iptables -A INPUT -i eth1 -j ACCEPT iptables -A INPUT -j DROP
最後,設置轉發
iptables -A FORWARD -i eth1 -j ACCEPT iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
過濾表的預設策略應該是 DROP,而不是 ACCEPT,否則預設轉發所有數據包。
iptables -P FORWARD DROP