我有這些 SSH 伺服器/客戶端:
A - 沒有公共IP
B-公共IP
C - 沒有公共IP
我知道,我可以如下建立從 A 到 C 的 SSH 連線:
1)將C鉤到B。
ssh -R 10100:localhost:22 B_IP
2) 使用 B 鉤子設定從 A 到 C 的連接埠轉發,以便能夠在機器 A 上使用 ssh-agent:
ssh -L 5000:localhost:10100 B_IP
3)現在我可以使用我的 ssh 密鑰從 A「直接」存取 C:
ssh -p 5000 localhost
……我的觀點是:
我能否以某種方式建立從 A 到 C 的新「純粹」連接這樣當機器 B 宕機後,我可以繼續我的工作嗎?
我認為只要這兩台電腦意識到它們已經共享連接就應該有可能,還是我錯了?
感謝您的時間和想法:)
答案1
這通常方法是在A或C的路由器上設定「NAT連接埠轉送」。 (如何完成取決於路由器,但到處都有說明。)一旦這樣做,您就可以連接到C路由器的公共地址+“轉發”端口,並且連接將通過C。
(註:NAT埠轉送和SSH埠轉送類似但截然不同東西,例如錘子和螺絲起子。不要混淆他們。
如果您沒有任一路由器的管理存取權限,您可以嘗試使用 UPnP 或 NAT-PMP 來設定連接埠轉送規則,就像許多遊戲和 P2P 程式所做的那樣。為此,請使用
upnpc
或natpmpc
命令。如果上述方法都不起作用,您將需要某種形式的NAT打洞。 (另請參閱傳輸控制協定和ICMP打孔文章。
不幸的是,雖然它被廣泛用於各種具體的程序好像不多通用的不過 TCP 工具喬納特可能有效。
答案2
這可能是不可能的,除非您可以在路由器上執行某種連接埠轉送 - 但在這種情況下,您根本不需要電腦 C。
問題是,在您的範例中,您不是直接從 A -> C,封包仍然穿過 B。
如果您有另一台具有公共位址的計算機,您可以在星形拓撲中設定 VPN,並使用 VPN 之間的路由來建立一個虛擬網絡,其中任何一個公共主機都可以崩潰,並且一切都可以繼續工作。我已經使用 OpenVPN 完成了此操作 - 有一些問題 - 其中一個重要的問題是停用反向路徑過濾。
答案3
實現此目的的一種方法是使用對等 VPN - 這種 VPN 不需要其中一台主機具有指向它的靜態 IP 位址或靜態網域名稱。下面提到的其他想法並不是真正的 VPN,而是透過某種協定建立點對點連線的軟體。以下是一些選項:
基於毒聊網路:
我個人嘗試了這兩種解決方案,但它們被我工作的(大公司風格)網絡阻止了。
- 毒VPN- 截至今天,似乎維護得不好,但應該可以使用。
- 吞托克斯- 類似的想法,雖然它不是真正的VPN,但可以在tox網路上的兩台機器之間建立連接並轉發ssh連接埠。 README 中提供了 ssh 的範例。
基於公共、非免費的聊天服務
我個人還沒有嘗試過這些方法,我懷疑它們是否有效,但它們可能值得嘗試。
基於公共伺服器(由其他人維護)的VPN
個人經驗:嘗試過n2n
,但被我工作的(大公司風格)網絡阻止了。
- n2n- 使用“超級節點「 這是由恩托普
n2n
團隊 - 它根據的 README運行supernode.ntop.org:7777
(超級節點也是免費軟體,但運行它再次需要一個可公開訪問的伺服器)。 - 努貝拉- 類似的概念
n2n
,但不是超級節點它被稱為燈塔。他們不提供公共燈塔供每個人使用,但您實際上必須dnclient
在公共可用的 VPS 上運行它們,如中所述他們的文檔。因此它不能滿足您的要求,但我認為它仍然值得一提。
其他需要付費訂閱的 VPN 解決方案。
與大多數商業 VPN 服務不同,只有少數針對高級用戶的服務允許兩個用戶透過您獲得的 VPN 子網路相互通訊。可能還有其他可用的提供者可以提供此功能。這是一個:
- Hamachi,作者:LogmeIn (vpn.net)- 客戶端不是開源的,但似乎根據他們的文檔事實上,它可以讓您管理網路和 IP 位址等。
以社區維護為基礎的網絡
即使在重度 NAT 後面,如果您的防火牆限制不太嚴格(在我的情況下並非如此),您也可以執行以下任一操作(不是 VPN):
最後的解決方案
即使您可能受到最煩人的防火牆、NAT 和其他網路限制,您也應該能夠使用精彩的功能https://tmate.io/免費(如免費啤酒和自由言論)軟體和服務。但它有一些缺點:
- 沒有互動式命令(請參閱問題 #179)。
- 沒有
scp
支援。 tmux
fork 所基於的版本是截至今天的版本2.6.0
,而當前 tmux 的最新版本是3.3a
- 這意味著為了讓您~/.tmux.conf
工作~/.tmate.conf
,您必須進行重要的調整(請參閱例如來自我的個人點文件)。
儘管 tmate 的維護者沒有明確提及這一點,但我認為提到的第一兩個缺點是有意的限制,因為人們可以濫用這些能力透過 的tmate.io
伺服器傳輸大量資料。因此,這tmate
實際上為您的 shell 提供了一種「遠端桌面」。您必須找到其他方法在兩台機器之間傳輸檔案(考慮同步事物)。
總而言之,tmate 的易用性和出色的性能使其成為我認為最好的解決方案。加上同步事物對於傳輸文件,我認為這是最好的解決方案,也是最可靠的解決方案。