對于外網(wǎng)來說,公司內(nèi)部的是內(nèi)網(wǎng),中間隔了個(gè)防火墻,如果想從外網(wǎng)去訪問公司內(nèi)部網(wǎng)絡(luò),正常情況下是不可行的,也無法做到端口轉(zhuǎn)發(fā)(除非在公司防火墻上打個(gè)洞),一般場景有外網(wǎng)訪問公司內(nèi)網(wǎng),外網(wǎng)訪問學(xué)校的內(nèi)網(wǎng)。
外網(wǎng)無法訪問到內(nèi)網(wǎng),歸根結(jié)底就是因?yàn)閮?nèi)網(wǎng)對于外網(wǎng)不可見,一般要實(shí)現(xiàn)外網(wǎng)訪問到內(nèi)網(wǎng),有兩種方法:一種是端口映射,就相當(dāng)于將內(nèi)網(wǎng)主機(jī)的某個(gè)端口在防火墻上開放出來,這樣一來就相當(dāng)于是兩臺外網(wǎng)主機(jī)的通信了;另一種就是SSH反向連接,就是內(nèi)網(wǎng)是可以訪問到外網(wǎng)的,那么內(nèi)網(wǎng)主機(jī)先主動(dòng)連接外網(wǎng)主機(jī),這樣一來就建立了連接,然后外網(wǎng)主機(jī)就可以ssh登錄到內(nèi)網(wǎng)主機(jī)了,這就是所謂的反向連接。但是這種連接是不穩(wěn)定的,可能會(huì)斷掉,但也有方法解決。
ssh -NfR 1234:localhost:22 user1@172.16.32.11 -p 88
ss -ant |grep 1234
LISTEN 0 128 127.0.0.1:1234 *:*
ssh username@localhost -p 1234
前面說過這種反向連接不穩(wěn)定,可能隨時(shí)會(huì)斷開,這時(shí)候又得重復(fù)上面步驟去打通,而當(dāng)你無法登陸上內(nèi)網(wǎng)主機(jī)去操作以上的步驟時(shí)候,那就沒法玩了。
這時(shí)可以使用autossh來解決這個(gè)隨時(shí)斷開的問題。
具體指令為:
autossh -M 2000 -NfR 1234:localhost:22 user1@172.16.32.11 -p 88
解釋:
ubuntu下設(shè)置autossh開機(jī)自動(dòng)啟動(dòng)
vi /lib/systemd/system/autossh.service
[Unit]
Description=Robust SSH Reverse Tunnel and Port Forward
After=network.target
[Service]
User=ubuntu
ExecStart=/usr/bin/autossh -M 2000 -fNR 1234:localhost:22 -i /home/ubuntu/.ssh/id_rsa 172.16.32.11
KillMode=process
[Install]
WantedBy=multi-user.target
Alias=autossh.service
然后執(zhí)行
sudo systemctl daemon-reload
sudo systemctl start autossh.service
sudo systemctl enable autossh.service
注意:
ssh的配置文件中要把GatewayPorts修改為yes