Linux

IPTables - 埠到另一個 ip 和埠(從內部)

  • November 22, 2019

我目前有一個 NAS 盒子在 80 埠下執行。為了從外部訪問 NAS,我將 8080 埠映射到 NAS 上的 80 埠,如下所示:

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.32.25.2:80

這就像一個魅力。但是,這僅在我從網路外部(在工作中、在不同的房子等)訪問網站時才有效。因此,當我輸入 時mywebsite.com:8080,IPTables 可以正確完成工作,並且一切正常。

現在,我遇到的問題是,如何從網路內部重定向此埠?我的域名mywebsite.com從內部(10.32.25.1)指向我的路由器(我的 linux 伺服器),但我想從內部將埠 8080 重定向到 10.32.25.2 上的埠 80。

有什麼線索嗎?

編輯#1

為了幫助解決這個問題,我把這張圖放在一起。如果它不正確或歪曲您正在尋找的內容,請隨時更新。

                                iptables
                                    |                   .---------------.
   .-,(  ),-.                       v               port 80             |
.-(          )-.        port 8080________               |               |
(    internet    )------------>[_...__...°]------------->|      NAS      |
'-(          ).-'     10.32.25.2    ^   10.32.25.1      |               |
    '-.( ).-'                       |                   |               |
                                    |                   '---------------'
                                    |
                                    |
                                  __  _ 
                                 [__]|=|
                                 /::/|_|

我終於找到了方法。首先,我必須添加-i eth1到我的“外部”規則(eth1 是我的 WAN 連接)。我還需要添加另外兩個規則。最後我帶來了什麼:

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A POSTROUTING -p tcp -d 10.32.25.2 --dport 80 -j MASQUERADE

您還忘了提到應該啟用包轉發才能執行目標 NAT。預設情況下,它通常是關閉的,因此 iptables 規則將不起作用。可以通過發出以下命令啟用它:

echo 1 > /proc/sys/net/ipv4/ip_forward

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