autossh反向代理实现内网穿透

文章首发于www.litreily.tophtml

有时候须要在公司使用家里我的PC的一些资源,此时能够选择Teamvieawer进行远程,可是略微麻烦并且访问速率较慢,此时经过vps实现内网穿透就是个不错的想法。ubuntu

vps proxy

本文讲述的内网穿透方法是经过autossh实现vps对内网的反向代理,在vps与内网之间创建一条长链接,使得外网PC经过vps的反向代理访问内网PC。整个实现所需的条件以下:服务器

  1. 带有公网IP(222.222.222.222)的vps
  2. 保持开机且联网的内网PC
  3. 任一联网的外网PC

vps配置

修改vps的文件/etc/ssh/sshd_config, 取消如下参数的注释或是修改其值ssh

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安装autosshspa

sudo apt-get install -y autossh
复制代码

安装好之后,经过以上指令即可实现反向代理:代理

autossh -p 27000 -M 27400 -NR '*:27401:localhost:27402' root@222.222.222.222
复制代码

其中的参数:code

  • -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代理服务的监听端口,2740127402是vps与内网PC之间的一对端口映射,外网PC须要经过vps的27401端口访问内网。cdn

配置autossh服务

使用以上指令已经能够完成所需的功能了,可是每次开机都得从新输一遍,很不方便,因此能够把指令封装成一个服务,而后设置为开机启动。在ubuntu中,能够在lib/systemd/system目录下新建一个autossh.service的文件,并输入如下内容:htm

[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的话就没法使用了,此时能够学习下frpNgrok,使用公共的服务器实现代理.

参考

相关文章
相关标签/搜索