SSH | 端口转发和反向隧道

端口转发

描述:如果机器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
  • 检查防火墙的规则,看是否允许对应的端口接收数据,或者直接关了防火墙。

相关资源

猜你喜欢

转载自blog.csdn.net/feifei3211/article/details/102879381
今日推荐