场景
在外面要连接自己家里的电脑(Linux/MacOS),实现内网穿透
设备
- 一台能上网的Linux/MacOS主机
-
命令
ssh -L 本地端口转发,访问本地的某个端口如同访问服务器的端口
- ssh -R 远程端口转发,访问服务器的某个端口如同访问本地的端口
-
步骤
在服务器上设置sshd允许监听所有IP
sudo echo "GatewayPorts yes" >> /etc/ssh/sshd_confg
sudo systemctl restart sshd
一步到位:在本地主机上设置远程端口转发。服务器开始监听2222端口,访问服务器2222端口如同访问本地主机22端口
ssh -R 2222:localhost:22 user@server -N
- 在任意可上网主机上连接以上本地主机。其中user对应本地主机的用户名,server是服务器地址。连接成功即OK。
ssh user@server -p 2222
使用本地主机上网
在任意可上网主机执行如下命令即可连接到本地主机,并将当前主机的2222端口设置为socks5代理端口。
ssh -D 3333 user@server -p 2222 -N
使用chrome浏览器的SwitchyOmega插件可以设置socks5代理,将代理设置为localhost:3333即可使用以上本地主机的网络环境上网,同样可以直接访问所有在本地主机网域内的其他主机。
可能遇到的问题
Connection refused
- 本地主机未开启sshd服务,若是Linux,直接运行
sudo systemctl start sshd
即可启动ssh服务
若是MacOS,请自行查阅相关资料
- 本地主机sshd服务未监听0.0.0.0(所有IP),需要修改配置文件/etc/sshd_config
sudo echo "ListenAddress 0.0.0.0" >> /etc/ssh/sshd_confg
sudo systemctl restart sshd