autossh反向代理实现内网穿透
有时候需要在公司使用家里个人PC的一些资源,此时可以选择Teamvieawer
进行远程,但是略微麻烦而且访问速率较慢,此时通过vps
实现内网穿透就是个不错的想法。
本文讲述的内网穿透方法是通过autossh
实现vps对内网的反向代理,在vps与内网之间建立一条长连接,使得外网PC通过vps的反向代理访问内网PC。整个实现所需的条件如下:
- 带有公网IP(
222.222.222.222
)的vps - 保持开机且联网的内网PC
- 任一联网的外网PC
vps配置
修改vps的文件/etc/ssh/sshd_config
, 取消以下参数的注释或是修改其值
GetewayPorts yes
TCPKeepAlive yes
ClientAliveInterval 60
ClientAliveCountMax 3
内网PC配置
为了保证内网PC可以免密码访问vps,需要在vps添加内网PC的公钥
$ ssh-keygen
# ... enter ...
$ ssh-copy-id -i ~/.ssh/id_rsa.pub -p 27000 root@222.222.222.222
# 27000是访问vps的端口号,root是vps的用户名,222.222.222.222是vps的公网IP
配置好后,在内网PC安装autossh
sudo apt-get install -y autossh
安装好以后,通过以上指令便可实现反向代理:
autossh -p 27000 -M 27400 -NR '*:27401:localhost:27402' root@222.222.222.222
其中的参数:
-p 27000
: vps ssh 端口,默认值22-M 27440
: 中继服务器(vps)的代理服务监听端口,需保证不被vps其它进程占用-NR '*:27401:localhost:27402'
: 端口映射,vps的27401
端口映射到内网PC的27402
端口root@222.222.222.222
: vps的用户名及IP
这里涉及到4个端口,27000
是vps ssh的监听端口,27400
是vps代理服务的监听端口,27401
和27402
是vps与内网PC之间的一对端口映射,外网PC需要通过vps的27401
端口访问内网。
配置autossh服务
使用以上指令已经可以完成所需的功能了,但是每次开机都得重新输一遍,很不方便,所以可以把指令封装成一个服务,然后设置为开机启动。在ubuntu
中,可以在lib/systemd/system
目录下新建一个autossh.service
的文件,并输入以下内容:
[Unit]
Description=Auto SSH Tunnel
After=network-online.target
[Service]
User=autossh
Type=simple
ExecStart=/usr/bin/autossh -p 27000 -M 27400 -NR '*:27401:localhost:27402' root@222.222.222.222 -i ~/.ssh/id_rsa
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
StartLimitIntervalSec=5
StartLimitBurst=12
Restart=always
[Install]
WantedBy=multi-user.target
WantedBy=graphical.target
配置好后,通过以下指令完成启动、查询和自启动。
- 启动服务:
sudo systemctl autossh start
- 查看状态:
sudo service autossh status
- 开机启动:
sudo systemctl enable autossh.service
远程访问内网
最后就是如何通过外网访问内网了,其实和访问vps本身类似,仅仅是改一下连接端口即可。
sudo ssh root@222.222.222.222 -p 27401
扩展说明
本文介绍的是通过vps实现反向代理,如果没有vps的话就无法使用了,此时可以学习下frp
或Ngrok
,使用公共的服务器实现代理.
参考
版权声明:本博客所有文章除特殊声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明出处 litreily的博客!