SSH隧道实现

场景

在外面要连接自己家里的电脑(Linux/MacOS),实现内网穿透

设备

  • 一台能上网的Linux/MacOS主机
  • 一台拥有公网IP的服务器

命令

  • ssh -L 本地端口转发,访问本地的某个端口如同访问服务器的端口
  • ssh -R 远程端口转发,访问服务器的某个端口如同访问本地的端口
  • ssh -D 动态端口转发,用于代理

步骤

  • 在服务器上设置sshd允许监听所有IP
1
2
sudo echo "GatewayPorts yes" >> /etc/ssh/sshd_confg
sudo systemctl restart sshd
  • 一步到位:在本地主机上设置远程端口转发。服务器开始监听2222端口,访问服务器2222端口如同访问本地主机22端口
1
ssh -R 2222:localhost:22 user@server -N
  • 在任意可上网主机上连接以上本地主机。其中user对应本地主机的用户名,server是服务器地址。连接成功即OK。
1
ssh user@server -p 2222

使用本地主机上网

在任意可上网主机执行如下命令即可连接到本地主机,并将当前主机的2222端口设置为socks5代理端口。

1
ssh -D 3333 user@server -p 2222 -N

使用chrome浏览器的SwitchyOmega插件可以设置socks5代理,将代理设置为localhost:3333即可使用以上本地主机的网络环境上网,同样可以直接访问所有在本地主机网域内的其他主机。

可能遇到的问题

Connection refused

  • 本地主机未开启sshd服务,若是Linux,直接运行
1
sudo systemctl start sshd

即可启动ssh服务
若是MacOS,请自行查阅相关资料

  • 本地主机sshd服务未监听0.0.0.0(所有IP),需要修改配置文件/etc/sshd_config
1
2
sudo echo "ListenAddress 0.0.0.0" >> /etc/ssh/sshd_confg
sudo systemctl restart sshd
作者

Exqlnet

发布于

2019-09-26

更新于

2023-10-15

许可协议

评论