内网穿透方案大全
- 内网穿透能解决以下常见问题:
- 方案一、透过路由器 / 猫路由一体
- 前提条件
- 配置方法
- 方案二、使用SSH隧道
- 前提条件
- 配置方法
- 1、服务器配置(默认CentOS)
- 2、 本机配置
- 方案三、使用frp工具
- 工具下载
- 1、服务器配置
- 2、 本机配置
- 方案四、商用ngrok工具
- 结语
内网穿透能解决以下常见问题:
- 开发外网应用时把本地服务映射到外网,加速调试流程;
- 把你正在开发的本地服务分享给互联网上其它人访问体验;
- 在任何地方通过互联网控制你家中在局域网里的电脑;
方案一、透过路由器 / 猫路由一体
此方案直接使用本机外网IP穿透,如果IP不固定,可以安装个向日葵、花生壳之类的软件,用的时候查看最新IP。
前提条件
- 路由器有外网IP
- 路由器配置权限
配置方法
- 登录路由器:192.168.X.X,找到《虚拟服务器》,添加映射:外网端口,本机端口,本地IP。
- 注意配置允许路由器:端口回流(否则局域网无法访问)
- 猫路由一体的可尝试百度查登录账号密码(比如查:猫密码 useradmin)
方案二、使用SSH隧道
前提条件
- 一台有外网 IP 的服务器
- 本地能通过 ssh 登录服务器
配置方法
1、服务器配置(默认CentOS)
登录服务器:ssh root@XXX.XXX.XXX.XXX -p 22
(1)首先修改服务器 B 的 sshd_config 配置文件:
vi /etc/ssh/sshd_config
(2)打开 GatewayPort(删除前面的 # 号,将其设置为 yes)>: 键盘按i,编辑配置:
GatewayPort yes
键盘按ESC,输入:wq保存退出
(3)修改保存后,执行如下命令将 sshd 服务重启下:
systemctl restart sshd
此项的意思是,SSH 隧道监听的服务的 IP 是对外开放的 0.0.0.0,而不是只对本机的 127.0.0.1。不开 GatewayPorts 的后果是不能通过 外网IP:X 访问,只能在外网服务器上通过 127.0.0.1:XX 访问到本地开发机的服务
(4)使用以上方法还是无法访问 外网IP:XX,请检查你外网服务器的防火墙配置
打开XX端口
firewall-cmd --zone=public --add-port=XX/tcp --permanent && firewall-cmd --reload
查看已开端口:
firewall-cmd --list-ports
关闭端口
firewall-cmd --zone=public --remove-port=XX/tcp --permanent && firewall-cmd --reload
2、 本机配置
(1)使用ssh
ssh -CqTfnN -R :外网映射端口:localhost:本地映射端口 root@外网IP -p 22
(2)查看状态
前往外网服务器,可以看到这个监听是否成功链接:
netstat -anp | grep 外网映射端口
(3)关闭映射
在外网服务器上查看指定端口,对应的sshd进程,Kill相应进程结束转发服务
kill -9 进程ID
(4) 自动重连
SSH 隧道是不稳定的,在网络恶劣的情况下、或因为超时可能随时断开。如果断开就需要手动去本地开发机再次向外网服务器发起连接。
AutoSSH 能让 SSH 隧道一直保持执行,他会启动一个 SSH 进程,并监控该进程的健康状况;当 SSH 进程崩溃或停止通信时,AutoSSH 将重启动 SSH 进程。
为此我们需要结合免密码登录及 AutoSSH 来提供稳定的 ssh 反向代理隧道。
a、在内网主机 B 上产生公钥和私钥
ssh-keygen
然后按三次回车执行默认选项生成公钥和私钥。会生成密钥文件和私钥文件 id_rsa,id_rsa.pub 或 id_dsa,id_dsa.pub
b、拷贝秘钥 在内网主机 B 上继续执行如下命令,将内网主机 B上的秘钥文件 copy 到公网主机 A 中。
ssh-copy-id user@服务器ip
其中“user”是公网主机 的用户名,ip 为公网主机 A 的 ip,然后按照提示输入公网主机A 的密码就完成了。
(5) 通过源码安装autossh;
$ wget www.harding.motd.ca/autossh/autossh-1.4e.tgz --no-check-certificate
$ tar -xf autossh-1.4e.tgz
$ cd autossh-1.4e
$ ./configure
$ make & make install
(6)启动autossh
只要把 autossh -M XX 替换为 ssh 即可:
autossh -M 外网映射端口 -CqTfnN -R :外网映射端口:localhost:本地映射端口 root@外网IP -p 22
(7)开机自启动
vi /etc/rc.d/rc.local
#将上一步(6)中代码copy到底部,保存并退出
chmod +x /etc/rc.d/rc.local
方案三、使用frp工具
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。
frp 有以下特性:
- frp 比 SSH 隧道功能更多,配置项更多;
- frp 也需要一台外网服务器,并且需要在外网服务器上安装 frps,在本地开发机上安装 frpc;
工具下载
1、服务器配置
先看看服务器是否开启了任务监听对应端口,默认连接端口是7000
netstat -tunlp | grep 7000
如果任务已开始监听,然后看看防火墙是否开放了这个端口,很重要
(1)编辑服务端文件frps.ini:
[common]
bind_port = 7000
#dashboard_port = 7500
#dashboard_user = admin
#dashboard_pwd = admin
#authentication_method = token
#token = 设置密码
(2)启动服务frps
./frps -c frps.ini
(3)登录控制面板查看frp服务状态和已连入主机
服务器IP:7500
2、 本机配置
(1)编辑配置文件frpc.ini
[common]
server_addr = 服务器IP
server_port = 7000
#authentication_method = token
#token = 对应服务器端密码
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 2222
[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 3389
(2)启动连接frpc
为了方便,建个bat脚本,可设置开机启动
Start frpc.exe -c frpc.ini
方案四、商用ngrok工具
ngrok 是一个商用的内网穿透工具,它有以下特点:
- 不需要有外网服务器,因为 ngrok 会为你提供;
- 只需要在本地开发机安装 ngrok 客户端,和注册 ngrok 账户;
- 按照服务收费;
结语
1、方便远程桌面,打开本机3389,通过远程映射,实现《远程桌面》访问。
2、架设内网服务器,内网ssh远程访问等服务。
3、通过nginx映射,实现域名访问本地服务器,模拟线上环境。
server {
listen 80;
server_name 你的外网域名;
charset utf-8;
location / {
proxy_pass http://localhost:映射端口;
}
}