使用frp端口映射实现内网穿透(SSH、HTTP服务)
一、下载
通过内网穿透的原理和实现方式的学习我们已经明白了内网穿透的原理,想要实现内网穿透就需要让内网实现与具有公网IP的设备进行绑定。
我们这里使用frp(一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网)进行内网穿透。下载地址:/fatedier/frp/releases
我们需要在内网设备和公网设备上都进行frp的下载。
fprc:客户端程序;(内网程序)frpc.ini:客户端程序配置文件;frps:服务网器端程序;(公网程序,进行端口映射服务)frps.ini:服务器端程序配置文件;
二、基础配置配置
1)对于公网设备,我们需要配置frps.ini文件
[common]bind_port = 7000token = 129496dashboard_addr = 0.0.0.0dashboard_port = 7500dashboard_user = rootdashboard_pwd = xxxx
bind_port:用户客户端与服务端连接的端口(让外网设备可以将请求信息转发给内网让内网主动与发起请求设备进行连接)token:认证密码dashboard:仪表盘 addr:服务器本机port:仪表盘网页绑定在服务器的端口user:访问仪表盘网页的用户名pwd:密码
2)对于内网设备,我们需要配置frpc.ini文件
[common]server_addr = ipserver_port = 7000authentication_method = token token = xxxxx
server_addr:服务器(公网设备)IPserver_port:服务器端口(有了IP和端口后内网即可进行NAT穿透,让公网设备可以将请求转发给自己),需与服务器bind_port的设置保持一致authentication_method:采用token的认证方式token:认证密码,需与服务器的设置保持一致
3)服务器端开放7000端口和7500端口
三、实现SSH服务
1)在原本客户端的frpc.ini配置基础上增加
# 配置ssh服务[ssh]type = tcplocal_ip = 127.0.0.1 local_port = 22 # ssh服务端口remote_port = 6000 # 这个自定义,之后再ssh连接的时候要用
注释记得去除
[ssh]:[服务名]type:表示想要实现的服务对应的协议local_ip:表示本地需要暴露到公网的服务地址,即内网对应的地址local_port:表示本地需要暴露到公网的端口,即内网监听的端口,由于是ssh服务故监听22端口remote_port:表示在 frp 服务端监听的端口,访问外网设备此端口的流量将会被转发到内网设备的对应端口(local_port)
2)服务器端开放6000端口
3)运行程序
服务器端:./frps -c ./frps.ini客户端:./frpc -c ./frpc.ini
4)使用ssh连接工具,通过外网ip加6000端口号即可以与内网建立ssh连接
四、实现HTTP、HTTPS服务
1)在原本客户端的frpc.ini配置基础上增加
[http]type = httplocal_ip = 127.0.0.1local_port = 8800custom_domains = xxx
此处与SSH服务配置相似,只是将type更改为http并多设置一个custom_domains
custom_domains = 这里填写你已经解析到frps服务端IP上的域名,自己每个穿透对应服务,都可以绑定一个专属域名用于访问,包括使用tcp和udp协议,然后就可以通过这个已经自定义域域名访问到自己的对应HTTP服务
如果没有域名则先写外网ip即可
注意这里没有设置remote_port,http服务和http服务的访问端口在服务器端设置
2)在原本服务端的frps.ini配置基础上增加
vhost_http_port = 7600vhost_https_port = 7601
vhost_http_port = 7600 和 vhost_https_port = 7601 表示将服务器的7600端口做为http服务的访问入口,7601端口做为https服务的访问入口
3)服务器端开放7600端口、如果配置了https服务则开放7601端口
4)运行程序
5)通过域名/ip+端口访问内网的http/https服务
五、frp服务自启动
进入frp目录,复制文件
cp frps /usr/local/bin/frps
mkdir /etc/frp
cp frps.ini /etc/frp/frps.ini
创建frps.service服务:vim /lib/systemd/system/frps.service
[Unit]Description=frpc daemonAfter=syslog.target network.targetWants=network.target[Service]Type=simpleExecStart=/usr/local/bin/frps -c /etc/frp/frps.iniRestart=alwaysRestartSec=1minExecStop=/usr/bin/killall frps[Install]WantedBy=multi-user.target
设置开机自启动:systemctl enable frps
开启服务:systemctl start frps
查看状态:systemctl status frps
active(running)则表示启动成功