Linux

CentOS 6 iptables nat 路由器

  • April 16, 2019

我正在嘗試為實驗室設置一個 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

引用自:https://unix.stackexchange.com/questions/315230