SSH 無法通過雙 NAT 工作
我正在嘗試通過 2 個 NAT 為 ssh 設置埠轉發
第一個路由器將我的網際網路 IP 轉換為我的外部網路 (10.1.7.0)。在外部網路中,有第二個路由器對我的內部網路 (192.168.1.0) 進行 NAT。
目標伺服器連接到外部網路和內部網路。
**我無法更改外部路由器的埠轉發選項。**目前配置為將 SSH 和 HTTP 埠轉發到內部網路的路由器。
Internet + | v +-----------------+ +------------------+ | Outer Router | | Inner Router | |-----------------| |------------------| | | SSH HTTP | | +----+ +--------------------->| | | | | | | | | | | | | +-------+---------+ +------+---------+-+ | | | | | | | | | | | | | | +------------------+ | SSH | | | | Server | | | | | |------------------| | | | +-----------> |<-------+ | | | | |HTTP (testing) | +------------------+ | | | +------v------------------+ | | Outer Workstation | +-------------------+ | |-------------------------| | Inner Workstation| | | | |-------------------| | | | | |<----------------+ +-------------------------+ | | +-------------------+
當從外部工作站連接到內部路由器的地址時,SSH 和 HTTP 都可以正常工作。
當使用 HTTP 從 Internet 連接到我的公共 IP 時,連接也可以正常工作。
然而 SSH 只是超時。很可能是因為沒有正確路由回复。
我懷疑它要麼是因為 SSH 本身,要麼是因為伺服器連接到內部和外部網路。
有什麼想法可以解決這個問題嗎?
伺服器上的路由目前是:
ip route show default via 10.1.7.254 dev eth0 metric 100 10.1.7.0/24 dev eth0 proto kernel scope link src 10.1.7.1 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.2
我必須改變這個嗎?如果有怎麼辦?
這種行為缺乏可能是由不對稱路由和禁止它的外部路由器的特性引起的。伺服器通過另一個連接(使用其預設網關到網際網路)將 ssh 回复路由回,並且外部路由器丟棄數據包。嘗試使用
iptraf
or監視流量,tcpdump
並查看數據包在伺服器的哪條線上輸出。Iptraf 有一個連接視圖,螢幕下方顯示數據包。您可能必須向內部路由器添加源 NAT 規則,以使 SSH 數據包以正確的方式返回。編輯:來自外部工作站的連接不通過外部路由器。它只是使用來自同一子網的 ip 直接連接到內部路由器,並且可以直接從伺服器的外部介面接收數據包,因為它也在同一子網上。
為了澄清這一點,請考慮適當的 NAT 是如何工作的。當外部路由器從 Internet 接收到 SSH 埠的數據包時,其“TO”地址和埠將被重寫為內部路由器的適當值。數據包的“FROM”地址保持不變。內部路由器收到數據包並再次重寫 TO 地址和埠,但 FROM 地址保持不變,即 SSH 數據包來自的原始可路由 IP 地址。內部路由器將數據包傳遞給伺服器(如果您的所有埠轉發配置正確),伺服器中的 sshd 接收它並直接向外部路由器發送回复。如果外層路由器被配置為丟棄非對稱路由的數據包,它將看到發送者沒有內層路由器的地址,並將其回收到大垃圾箱中。