如何使用 ssh 製造由外網進入內網的 VPN?

題主處在一個阻斷 UDP 連接,帶有 NAT 的區域網環境中。內網機器可 ssh 外網機器,反之則不行(無法配置埠轉發,題主自知打不過網管)。

題主想獲得這樣的效果,以便使用內網的 distcc 機群:

[ 內網一堆機器 ] —區域網— [ 邪惡的 ssh 連接者 ] —autossh 發起→ [ 外網的某台機器 ] —ssh— [ ssh 到這台機器的使用者 ]

請問應如何配置 ssh 的隧道和轉發才能達到這種效果?

註:「外網的某台機器」可以有多種選擇,分別是牆內上行 2M 下行 10M 的家庭網路和上下 10M 的亞洲牆外 VPS。所謂的 SSH VPN 是指能轉發大部分網路流量的工具,可以是 man ssh 中 iptables 製造網路設備(迫真 VPN)也可以是 socks 代理。


前提:

  • A 位於內網,B位於外網。

  • A 在 2120 埠開通了 ssh。

  • B 在 2121 埠開通了 ssh。

ssh -g -R *:2122:localhost:2120 user@b.domain.com -p2121 -i /your/id_rsa -y -N -f

在 A 上執行,即可通過 B 的 2121埠,將 A 的 2120 轉發到 B 的 2122,這樣你就可以在外網 ssh B 的 2122 來登錄 A,以進行進一步操作了。

另外家庭網路的話須注意當地電信是否提供公網 IP 以及是否在埠上做了手腳的問題。牆外 VPS 也須考慮網路穩定性。建議買個國內 VPS 充當跳板。

如果轉發後僅 B 機器 localhost 可訪問,則:

sudo vi /etc/ssh/sshd_config

末尾添加 GatewayPorts yes

再重啟服務即可。

另外 ssh 和 VPN 不是一個層面的事情。更多資料和學習,請看十八摸的這篇文檔:實戰 SSH 埠轉發。


沒理解題意,沒看懂方向,按我的理解,

目的是外網進入內網,

而且內網有一台能控制的電腦,

~~~~~~~~~~~~~~~~~~~~~~~~

內網A連接外網B,

內網A也開個ssh server,在22埠,

A用下面這句連接B,

ssh -R 2222:127.0.0.1:22 B的ip和埠,

這開了條隧道,

B執行下面這句,

ssh 127.0.0.1 -p 2222

就可以ssh連上內網A,

可以外網ssh進入內網了,

要代理之類的就簡單了,

ssh -D 7070 127.0.0.1 -p 2222

這就在外網A開了個socks代理埠7070,

其他的就不說了,反正據我所知,

拋開vpn,只是代理的話ssh都能實現,

不知道能不能達到題主的目的,


你需要ngrok


簡單點的話,你可以考慮ngrok以及frp等項目,通過ssh反向穿透和代理就可以完成。不過保密安全性不可以保證。

frp之前配置過,親測比較簡單,原理是埠轉發,github地址如下:

fatedier/frp

要保證安全性的話,還是通過VPN吧


僅針對題主的目的回答三個要點:

第一,題主可以按常規在 VPS 上開設 VPN 服務,例如使用 OpenVPN 等 (大路貨遇到困難容易尋求幫助) ,然後在內網裡通過客戶端連接。因此,此題化為 「如何開設、使用 VPN」 的一般問題,不需要任何針對性的回答,本題可以考慮關閉。

第二,通過 ssh 使用 distcc, 只要使用任何埠轉發工具,包括 netcat 或者用 openssh 的 -R 參數將 distcc 伺服器的 ssh 埠轉發到外面即可。除非要提供公眾服務,否則為安全考慮,建議不要使能 GatewayPorts. 另須注意的是:GatewayPorts 為 yes 或 no 的時候,命令行選項 -g 不起作用 (openssh 6.7).

第三,應該討論通過 ssh 使用 distcc 是否值得。將每個文件的平均編譯時間(user+sys time)與 ssh 登錄時間(real time, ssh distccuser@distccserver true)作對比,後者須可忽略不計,否則不應通過 ssh 使用 distcc 而應直接開設 distcc 服務,轉發 distcc 埠。這已經和 ssh, vpn 都沒有任何關係了,應重開一題討論。


推薦閱讀:

如何評價 Microsoft SSH Server for Windows ?
用 Mac OS X 自帶的 SSH 登陸 Linux 後出現中文亂碼,如何解決?
mac 怎麼登錄到 linux 伺服器並傳輸文件?

TAG:VPN | Linux | SSH | 計算機網路 |