Ssh
為什麼通過公共 IP 向自身 ssh 時,ssh 伺服器會認為機器具有本地地址?
我
sshd_config
以相同的方式在兩台機器 A 和 B 上進行了配置,這樣就可以在本地網路中使用密碼進行連接:Match address 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 PasswordAuthentication yes
兩台機器都只有私有 IPv4,位於不同的 LAN 和具有不同公共 IPv4 的不同路由器後面,並且可以與其路由器的公共 IP 連接(從外部轉發埠到 LAN 私有 IP)。
當然,如果我使用本地(IPv4)地址將一台機器連接到它自己或同一區域網路中的另一台機器,ssh 會按預期要求輸入密碼。現在看看通過路由器的公共 IPv4 連接機器時會發生什麼。什麼時候
- 使用 A 的公共 IP 從 A SSH 到 A:要求輸入密碼
- 使用 B 的公共 IP 從 B SSH 到 B:
permission denied (publickey)
- 從 B 到 A,或從 B 到 A:
permission denied (publickey)
顯然,在第一種情況下(在 LAN A 內部),sshd 匹配客戶端的本地網路地址,儘管它是通過公共 IP 進行 ssh,而在第二種情況下(在 LAN B 內部),它不匹配。造成這種差異的原因可能是什麼?
注意:使用
Match host localhost
而不是前一個,會導致在第一種情況下(當然還有其他情況下)權限被拒絕,因為通過路由器公共 IP 對自己的 sshing 被 A 本身視為具有私有 LAN IP,而不是 localhost 或公共智慧財產權。
您描述的流量,從內部系統 A 到發生埠轉發的 NAT 路由器 A 的 WAN IP 地址,稱為hair-pin NAT。(例如,有關交通流和危險的更詳細描述,請參閱此問答。)
根據在您的 NAT 路由器中實現髮夾 NAT 的方式,您可能會看到SSH 流量的源地址有:
- 已更改為 您的 NAT 路由器的 WAN IP 地址(髮夾式 NAT 工作正常,但由於您的匹配規則沒有看到內部 IP 地址密碼身份驗證被拒絕。)
- 已更改為 您的 NAT 路由器的 LAN IP 地址,內部網關地址(髮夾 NAT 正常工作,並且匹配規則有效,因為它從 LAN 網路範圍內檢測到源 IP 地址)
- 未更改並保持系統的內部 IP 地址(並且髮夾式 NAT 已被有效破壞,除非來自作為埠引導規則目標的同一系統的流量的特殊情況。但是您的匹配規則有效因為它會檢測到您伺服器的 LAN IP 地址。)
您需要檢查(您的日誌)並查看哪個 IP 地址顯示為 SSH 連接的來源,以了解適用於您的測試場景的內容。
我認為對於您的場景的 1 和 2 髮夾 NAT 在不同的 NAT 路由器 A 和 B 中實現不同,從而導致不同的行為。