CentOS 7 NAT 路由與 IPTABLE

CentOS 7 NAT 路由與 IPTABLE

我的本地網路有像 NAT 這樣的 CentOS 實例。我的本地網路中有一些子網路。其中有一個 PPTP VPN 伺服器。我必須需要將此伺服器發佈到互聯網。

所以。我的問題是流量無法從一條nat/PREROUTING鏈傳遞到另一條filter/FORWARD鏈。

  • 1.1.1.1是我的外部IP
  • 192.168.10.1是我的內部IP
  • 10.0.1.1是VPN伺服器IP
  • eth0是外部介面
  • eth1是內部介面

NAT規則(它有效。PKTS並且BYTES已更改)

-A PREROUTING -d 1.1.1.1/32 -i eth0 -p tcp -m tcp --dport 1723 -j DNAT --to-destination 10.0.1.1
-A PREROUTING -d 1.1.1.1/32 -i eth0 -p gre -j DNAT --to-destination 10.0.1.1

過濾規則(它不起作用。PKTS並且BYTES沒有改變)

-A FORWARD -d 10.0.1.1/32 -i eth0 -o eth1 -p tcp -m tcp --dport 1723 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.0.1.1/32 -i eth1 -o eth0 -p tcp -m tcp --sport 1723 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 10.0.1.1/32 -i eth0 -o eth1 -p gre -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.0.1.1/32 -i eth1 -o eth0 -p gre -m state --state RELATED,ESTABLISHED -j ACCEPT

當然,net.ipv4.ip_forward = 1我可以10.0.1.1從 NAT 伺服器 ping 通。

連接埠tcpdump1723 僅顯示外部介面上的操作。

我沒有想法。

UPD1。我檢查了路由ip route get 10.0.1.1 from <src> iif eth0並得到了RTNETLINK answers: Invalid argument。順便說一句,我得到了一些答案,然後我使用了任何名稱iifeth0,,,)。我只得到了有效的路線,然後沒有使用參數。eth1eth2iif

UPD2。我首先將-A FORWARD -d 10.0.1.1/32 -j ACCEPT規則新增到鏈中。filter/FORWARD但什麼也沒有。 Pkts 和位元組為零。

答案1

  • 其他規則也非常重要。規則的順序也是如此。因此,檢查命令的輸出iptables-save -c。研究您所建立的上述規則。

  • nat/PREROUTING在和鏈之間filter/FORWARD做出路由決策。使用 檢查路由ip route get 10.0.1.1 from <src> iif eth0。它應該返回有效的路線。如果還有其他內容,請將其貼到問題中。

  • 還要調查命令的輸出nstat -az

  • 要透過 NAT 傳遞 pptp,您需要載入 conntrack 模組:

    • nf_conntrack_proto_gre
    • nf_nat_proto_gre
    • nf_conntrack_pptp
    • nf_nat_pptp
  • 在最近的核心中,您應該明確啟用 conntrack 幫助程序,尤其是對於 pptp。所以你需要增加額外的規則。

iptables -t raw -A PREROUTING -p tcp -m tcp --dport 1723 -j CT --helper pptp
  • 啟用幫助程式的其他方法是 sysctl 命令:
sysctl -w net.netfilter.nf_conntrack_helper=1
  • 用於解決問題的其他工具:
    • conntrack -E- conntrack事件監控
    • tcpdump
    • -j NFLOG-tcpdump -ni nflog允許從 iptables 規則捕獲資料包。
    • -j TRACE目標 - 您可以透過防火牆規則調查封包的路徑。

聚苯乙烯如果您仍然遇到困難,請更新問題。

相關內容