对于外网来说,公司内部的是内网,中间隔了个防火墙,如果想从外网去访问公司内部网络,正常情况下是不可行的,也无法做到端口转发(除非在公司防火墙上打个洞),一般场景有外网访问公司内网,外网访问学校的内网。
外网无法访问到内网,归根结底就是因为内网对于外网不可见,一般要实现外网访问到内网,有两种方法:一种是端口映射,就相当于将内网主机的某个端口在防火墙上开放出来,这样一来就相当于是两台外网主机的通信了;另一种就是SSH反向连接,就是内网是可以访问到外网的,那么内网主机先主动连接外网主机,这样一来就建立了连接,然后外网主机就可以ssh登录到内网主机了,这就是所谓的反向连接。但是这种连接是不稳定的,可能会断掉,但也有方法解决。
ssh -NfR 1234:localhost:22 user1@172.16.32.11 -p 88 ss -ant |grep 1234LISTEN 0 128 127.0.0.1:1234 *:*ssh username@localhost -p 1234前面说过这种反向连接不稳定,可能随时会断开,这时候又得重复上面步骤去打通,而当你无法登陆上内网主机去操作以上的步骤时候,那就没法玩了。
这时可以使用autossh来解决这个随时断开的问题。
具体指令为:
autossh -M 2000 -NfR 1234:localhost:22 user1@172.16.32.11 -p 88
解释:
ubuntu下设置autossh开机自动启动
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
然后执行
sudo systemctl daemon-reload
sudo systemctl start autossh.service
sudo systemctl enable autossh.service
注意:
ssh的配置文件中要把GatewayPorts修改为yes