
我不知道如何更好地開始,所以我就直接說吧。我必須去國外旅行,但我需要訪問我家鄉網路本地的伺服器。我有一個 DD-WRT 路由器,後面只連接了我的電腦。所以我的問題是:我可以製定一些 iptables 規則,允許我從外部網路(外國)連接到我的路由器,並將我重定向到我的本地網路(ISP 提供)。我會嘗試製作一張我的需求的「地圖」。
/Me - X/
/My router - R/
/Internet - I/
/Local Server - S/
我訪問S(本地伺服器)的典型方式如下:X-R-S
我訪問互聯網的典型方式是:X-R-I
我的需求是:(R<--I<--X
然後從R連接到S)
這是因為我無法從外網訪問S。
當我不在家時,路由器後面沒有活動的 PC,因此我不能只在其上運行代理。
答案1
這應該是相對微不足道的;對 SSH 來說,這樣應該沒問題:
iptables -t nat -A PREROUTING -p tcp \
-i ppp0 --dport 22 \
-j DNAT \
--to-destination 10.10.10.10:22
假設:R的外部介面是ppp0
。這是應該應用規則的傳入介面。
假設:S 的 IP 位址是 10.10.10.10 - 當然要替換正確的位址。
其作用是「目的NAT」;基本上與「普通 NAT」完全相同,只是它用內部伺服器的目標位址替換目標位址,並在返回時撤銷它。要使用此功能,您需要在 X 上執行的操作就是運行,ssh R
而不是ssh S
連接到 S 上的 sshd(這僅在 X 目前處於運行狀態時才有效)不是在互聯網上,但在您的內部網路上;您還需要執行 SNAT - “正常”或來源 NAT - 以獲取來自 S 的回應並透過 R 發送,並且您需要將規則從“-i ppp0”更改為“-d <R的外部位址>”,以使其在從內部收到資料包時匹配,而不僅僅是從外部收到資料包;如您所知,它會變得有點毛茸茸的)。
筆記:當然,這也可以對任何其他連接埠完成,但我會真的很強烈建議不要暴露 Samba(Windows 共享)或未加密的 HTTP(除非它是公開的、未經身份驗證的內容)。或其他什麼,真的。只要有可能,它們的安全性就很重要,因此搭載 SSH 的連接埠轉送將為您省去許多麻煩。
不過 Samba 轉發很困難,因此您最好嘗試完全不使用它。