ssh反向隧道实现端口转发(需要公网server)

参考:

其实参考里面写的很详细了,主要要注意的地方就是:

  • 要在/etc/ssh/sshd_config设置Gatewayforword yes,在用户目录下好像还是不行的
  • 注意vps的防火墙,DO的vps自带ufw只对外开放22,80,443端口,(亏我还nmap了一下看到我定义的端口是开着的),关了ufw就可以直接端口转发了
  • aria2界面可以进(转发了80端口)但是就算把6800端口映射过去也不能下载(直接跳失败),原因猜想是读取的是vps上的aria2配置(which does not exist),等搞出来了以后更新一下吧明天还要考试。

下面简单贴一下配置:

  • vps有公网ip
  • alex和alarm都在nat下面
  • alarm是内网的下载机(NAS)
  • 目标是用alex来操控alarm

alarm:

1
2
3
4
5
6
# 把NAS的22号端口转发到vps的6766(自定义)端口(6777是autossh用来监听进程的)
$ autossh -p 22 -M 6777 -NR '*:6766:localhost:22' vps_username@vps_ip -f
# 把NAS的80端口转到vps的32000(自定义)端口,查看yaaw页面用的
$ ssh -NT -f -R *:32000:localhost:80 vps_username@vps_ip
# 转发6800,aria2的端口
$ ssh -NT -f -R *:6800:localhost:6800 vps_username@vps_ip

vps:

1
2
编辑/etc/ssh/sshd_config
GatewayPorts yes

注意是全局ssh的设置

alex:

1
2
# 实现nat穿透 远程访问
$ ssh -p 6766 alarm@vps_ip

使用autossh自动重连:

1
autossh -p 22 -M 6777 -NR '*:36000:127.0.0.1:22' alex@host_ip -4 -f
  • -4 使用ipv4,否则会把连接认成是ipv6
  • -f 在后台跑…不然没法挂着
  • 要事先加好rsa.pub,否则-f跳过了输入验证码的环节没法开启隧道

tips

除了ssh使用的22号端口,80还有6800这样aria2和httpd使用的端口也可以映射,8200的dlna端口没有尝试。 仔细一想端口都暴露在外面好可怕(aria2没加密码等于是裸奔在互联网上),以防万一还是注意一下比较好。