1、内网穿透是什么?
内网穿透即NAT(网络地址转换)穿透,在处于使用了NAT设备的私有TCP/IP网络中的主机之间建立连接的问题。通过映射端口,让外网的电脑找到处于内网的电脑。
2、为什么需要用到内网穿透?
在日常开发过程中,有些功能在开发阶段,需要把部署在内网的服务公开到外网以供访问,这时就需要借助内网穿透工具来实现。
3、怎么用FRP实现内网穿透?
3.1 FRP介绍
通过网上查找资料对比,我采用FRP来实现内网穿透。FRP是一个开源、简洁易用,高性能的内网穿透和反向代理软件,支持tcp、upp、http、https等协议。
3.2 FRP配置说明
使用FRP配置内网穿透,需要一台具有外网IP的服务器,我用的是腾讯云服务器。FRP配置教程分为两部分,一个是服务器端的配置,另一个是客户端的配置。
3.3 FRP服务端配置
1. 执行以下命令,下载frp工具压缩包。
wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz
2. 执行以下命令,解压frp工具包。
tar -xvf frp_0.38.0_linux_amd64.tar.gz
3. 执行以下命令,移动至/usr/local。
mkdir /usr/local/frp
mv frp_0.38.0_linux_amd64/* /usr/local/frp/
4.(可选)删除frpc.ini和frpc文件,frpc相关的文件属于客户端配置。
cd /usr/local/frp/
rm frpc.ini
rm frpc
5. 进入到该解压目录,并打开配置文件。
cd /usr/local/frp/
vi frps.ini
6. 编辑配置文件内容如下,保存后退出。
[common]
# frp监听的端口,默认是7000
bind_port = 7000
# 自定义设置的http访问端口
vhost_http_port = 7001
# 授权码
token = oEeD5E2uv5
# frp管理后台端口
dashboard_port = 6500
# frp管理后台用户名和密码
dashboard_user = admin
dashboard_pwd = admin@123
enable_prometheus = true
# frp日志配置
log_file = /var/log/frps.log
log_level = info
log_max_days = 3
# 域名访问配置
subdomain_host = demo.com
privilege_mode = true
7. 设置和启动frp服务
mkdir -p /etc/frp
cp frps.ini /etc/frp
cp frps /usr/bin
cp systemd/frps.service /usr/lib/systemd/system/
systemctl enable frps
systemctl start frps
8. 服务器防火墙开放端口:6500、7000、7001、7002。
9. 验证服务端是否启动成功
访问:http://服务器IP:后台管理端口,输入用户名和密码可以查看连接状态。
如:http://106.34.xx.xxx:6500,用户名和密码分别对应frps.ini文件中的dashboard_user和dashboard_pwd。
3.4 FRP客户端配置
1. 下载window版的frp库
https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_windows_amd64.zip
2. 解压frp压缩包,进入该解压目录,并打开配置文件frpc.ini,将文件内容修改如下:
[common]
# 服务器IP地址
server_addr = 106.34.xx.xxx
# 与frps.ini的bind_port一致
server_port = 7000
# 与frps.ini的token一致
token = oEeD5E2uv5
# 配置http服务,用于域名访问
[web]
type = http
local_ip = 127.0.0.1
local_port = 10010
subdomain = test
# 配置tcp服务,用于ip访问
[web1]
type = tcp
local_ip = 127.0.0.1
local_port = 10010
remote_port = 7002
3. 启动客户端,在frp解压目录下执行。
frpc -c frpc.ini
4. 看到以下信息,说明配置已成功。
2023/01/04 14:36:19 [I] [service.go:301] [f85076e934dbff04] login to server success, get run id [f85076e934dbff04], server udp port [0]
2023/01/04 14:36:19 [I] [proxy_manager.go:144] [f85076e934dbff04] proxy added: [web web1]
2023/01/04 14:36:19 [I] [control.go:180] [f85076e934dbff04] [web] start proxy success
2023/01/04 14:36:19 [I] [control.go:180] [f85076e934dbff04] [web1] start proxy success
5. 测试内网穿透是否成功。
使用域名访问:http://test.demo.com:7001
使用IP访问:http://106.34.xx.xxx:7002
4、配置FRP有哪些需要注意的?
尽量避开浏览器 ERR_UNSAFE_PORT,这些端口浏览器会识别为不安全端口,不能访问。例如以下端口:
1, // tcpmux
7, // echo
9, // discard
11, // systat
13, // daytime
15, // netstat
17, // qotd
19, // chargen
20, // ftp data
21, // ftp access
22, // ssh
23, // telnet
25, // smtp
37, // time
42, // name
43, // nicname
53, // domain
77, // priv-rjs
79, // finger
87, // ttylink
95, // supdup
101, // hostriame
102, // iso-tsap
103, // gppitnp
104, // acr-nema
109, // pop2
110, // pop3
111, // sunrpc
113, // auth
115, // sftp
117, // uucp-path
119, // nntp
123, // NTP
135, // loc-srv /epmap
139, // netbios
143, // imap2
179, // BGP
389, // ldap
465, // smtp+ssl
512, // print / exec
513, // login
514, // shell
515, // printer
526, // tempo
530, // courier
531, // chat
532, // netnews
540, // uucp
556, // remotefs
563, // nntp+ssl
587, // stmp?
601, // ??
636, // ldap+ssl
993, // ldap+ssl
995, // pop3+ssl
2049, // nfs
3659, // apple-sasl / PasswordServer
4045, // lockd
6000, // X11
6665, // Alternate IRC [Apple addition]
6666, // Alternate IRC [Apple addition]
6667, // Standard IRC [Apple addition]
6668, // Alternate IRC [Apple addition]
6669, // Alternate IRC [Apple addition]
参考文章: