内网穿透利器frp部署配置指南
2019-10-31
frp是一个使用go语言开发的反向代理服务,可用于内网穿透,支持tcp, udp协议,为http和https协议提供了额外的能力,且尝试性支持了点对点穿透。 由于ngrok 2.x已经闭源,ngrok 1.x已不再维护,所以这里尝试使用frp替代ngrok作为个人的内网穿透工具。
0.前提条件 #
- 一台Linux云主机(这里是CentOS 7),并要求具有固定公网IP暴露这台云主机指定端口的能力
- 有一个域名解析到这个公网IP,如
frp.frognew.com
和*.frp.frognew.com
解析到这个公网IP
1. 下载frp服务端frps和客户端frpc可执行文件 #
分别在服务器和个人本地机器上,从[https://github.com/fatedier/frp/releases]下载对应平台的frp服务端frps和客户端frpc可执行文件。 这里下载的0.29版本。
服务端:
1wget https://github.com/fatedier/frp/releases/download/v0.29.0/frp_0.29.0_linux_amd64.tar.gz
2tar -zxvf frp_0.29.0_linux_amd64.tar.gz
3cd frp_0.29.0_linux_amd64
4mkdir /usr/local/frp
5cp frps /usr/local/frp
6cp frps.ini /usr/local/frp
2. 配置启动服务端frps #
编写frps的Systemd配置文件/etc/systemd/system/frps.service:
1[Unit]
2Description=Frp Server Service
3After=network.target
4
5[Service]
6Type=simple
7User=nobody
8Restart=on-failure
9RestartSec=5s
10ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
11
12[Install]
13WantedBy=multi-user.target
修改frps的配置文件/usr/local/frp/frps.ini:
1[common]
2bind_port = 17000
3vhost_http_port = 8082
4token = 12345678
启动frps:
1systemctl enable frps
2systemctl start frps
3
4netstat -nltp | grep frps
5tcp6 0 0 :::17000 :::* LISTEN 32481/frps
6tcp6 0 0 :::8082 :::* LISTEN 32481/frps
3.nginx配置 #
接下来配置nginx反向代理frps的http服务:
1server {
2 listen 80;
3 server_name *.frp.frognew.com;
4 rewrite ^(.*)$ https://$host$1 permanent;
5}
6
7
8server {
9 listen 443 ssl;
10 server_name *.frp.frognew.com;
11 proxy_set_header X-Real-IP $remote_addr;
12 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
13 proxy_set_header Host $http_host:8082;
14 proxy_set_header X-Nginx-Proxy true;
15 proxy_set_header Connection "";
16
17 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
18 ssl_certificate /etc/letsencrypt/live/frognew.com/fullchain.pem;
19 ssl_certificate_key /etc/letsencrypt/live/frognew.com/privkey.pem;
20 location / {
21 # proxy_intercept_errors on;
22 # error_page 404 /404.html;
23 proxy_pass http://127.0.0.1:8082;
24 }
25
26}
4.frp客户端配置 #
使用python在本地快速启动一个http服务用于测试:
1python3 -m http.server 8080
下面将使用frp将这个http服务暴露到公网,编写frp客户端frpc的配置文件frpc.ini:
1[common]
2server_addr = frp.frognew.com
3server_port = 17000
4tls_enable = true
5token = 12345678
6
7
8[web]
9type = http
10local_port = 8080
11custom_domains = demo.frp.frognew.com
12http_user = abc
13http_pwd = abc
启动frp客户端:
1./frpc -c ./frpc.ini
使用http://demo.frp.frognew.com
即可从公网访问前面使用python启动的用于测试的http服务。
上面只是frp的基本功能,frp还提供更多的功能。 关于frp的更多内容可以查看官方文档frp。