文章目录
- 端口转发
- 反向隧道
- 故障排除
- 相关资源
端口转发
描述:如果机器A能ssh连接服务器B,可以通过端口转发,让A访问B能访问的网络。如果B位于国外,可以用这实现…。
步骤一
在A上,通过ssh连接B,连接的时候开启端口转发。命令如下:
# 将本地端口9000收到的数据转发到服务器B
ssh -D 127.0.0.1:9000 USER_B@IP_B
注:如果是Windows,可以先安装ssh客户端,再打开cmd进行连接。
步骤二
在浏览器或者终端,设置网络,将数据转发到端口9000
,从而可以转发到服务器B
。
在Firefox上,可以直接通过设置
->网络设置
,设置如下:
设置完后,可以通过Firefox,访问B的网络。
反向隧道
假设B能连接A,通过反向隧道,如果C能连接A,则C也能连接B。如果B位于公司内网,就可以进行内网穿透(连接的方向为C->A->B)。
假设A和B是Linux服务器,运行了sshd服务。
步骤一
先在A上修改sshd设置,使得允许端口转发。用vim
编辑/etc/ssh/sshd_config
,打开GatewayPorts开关 GatewayPorts yes
(如果是Ubuntu没有GatewayPorts, 添加一行即可)。重启网络服务sudo systemctl restart sshd
步骤二
在B上安装autossh
,防止建立的连接时间长了中断。
sudo apt install autossh # Ubuntu
sudo yum install autossh # CentOS
步骤三
在B上通过ssh连接A,建立反向隧道
autossh -p 22 -M 6777 -NR '*:6766:localhost:22' USER_A@IP_A &> /tmp/autossh.log &
# 后台挂起,只要A,B不关机,不断网,建立的连接都不断
disown -a
步骤四
现在A的6766
端口已经转发到B的22
端口(ssh服务),在C上,通过A连接到B
# 在C上ssh连接B上的用户,使用A的IP和端口
ssh -p 6766 USER_B@IP_A
故障排除
我在用阿里云的时候,遇到了在服务器A某些端口不能连接,可能的情况遇到两种
- 考虑是阿里云的安全组没有开启某些端口,这时需要打开对应的端口。 https://yq.aliyun.com/articles/92050
- 检查防火墙的规则,看是否允许对应的端口接收数据,或者直接关了防火墙。