
我正在使用具有以下硬體的兩個路由器設定:
網件 WNDR3400V2 - 192.168.1.1 - DD-WRT
貝爾金 F9K1105 v1 - 192.168.1.50 - 庫存韌體
貝爾金被設定為交換機,我連接了一個網路伺服器。
[網際網路] -> Netgear -> 貝爾金 -> 伺服器
內部連接時,它會正確記錄我的 IP(例如 192.168.1.51)外在地,所有IP都被視為192.168.1.1(主路由器的IP)
當然,當不在第二個路由器後面時,這工作得很好,但不幸的是我目前的設定是不必要的。
我想知道是否可以獲得一些關於如何能夠從伺服器正確「查看」外部 IP 位址的具體說明。
先致謝!
答案1
問題似乎出在 DD-WRT 設定的預設 iptables 規則中。
刪除 POSTROUTING 中的 MASQUERADE 行解決了我的問題,外部連線不再顯示為我的主路由器的內部 IP。
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE 0 -- anywhere anywhere
SNAT 0 -- 192.168.1.0/24 anywhere to:1.1.1.1
RETURN 0 -- anywhere anywhere PKTTYPE = broadcast
這將刪除上面列表中的第一個元素:
iptables -t nat -D POSTROUTING 1
有關上述修復的更多資訊可以在這裡找到:https://www.reddit.com/r/HomeNetworking/comments/40swj2/firewall_log_shows_router_ip_for_all_incoming/cyxaz3t/
現在,一切都應該正常。
附註:如果您無法再從內部 IP 透過外部 IP 存取您的服務,您可能需要執行以下一項或兩項操作(我需要兩項):
確保取消選取“DD-WRT -> 安全性 -> 防火牆”上的“過濾 WAN NAT 重定向”
運行以下命令:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 192.168.1.0/24 -j MASQUERADE
將兩個出現的 192.168.1.0/24 替換為與您的設定相關的內容。
為了使這更容易,我建議將其保存在「管理 -> 命令」下的防火牆腳本中
iptables -t nat -D POSTROUTING 1
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 192.168.1.0/24 -j MASQUERADE