# frp内网穿透配置 [TOC] > frp的使用场景是,外网希望访问到内网,但是内网又无法或没有权限映射端口到公网IP的情况。frp需要借助公网的一台服务器进行流量转发。如果不希望转发或没有公网服务器,但可以映射端口,可参考 [9.动态IP情况下如何绑定域名](:/e4759c46346547dfa0775fa7ac3253e3) ;但如果既没有公网服务器,又无法端口映射,则可以参考这个:[4.内容同步和照片同步相关配置](:/8313850c5003427a936bbcea54521bc5) 。 ## 前言 本文仅介绍访问放置在内网环境下的linux设备。其他不予考虑。 ## frp介绍 1. frp需要在内网服务器(frpc,简称客户端)和公网服务器(frps简称服务端)分别部署; 2. 需要开多个端口; 3. 用户通过访问服务端frps,服务端连接到客户端frpc,进行访问内网服务器;不管是ssh还是其他web应用,都可以; 4. 如果有多台内网设备,多个地方的内网设备,也只需要有一个frps服务端,即可工作; 5. 后续如果要访问不同的应用,则需要设置不同的域名绑定。 ## frp应用下载 地址在这里:[https://github.com/fatedier/frp/releases](https://github.com/fatedier/frp/releases) 解压以后分两部分内容: ```bash -rwxr-xr-x 1 lighthouse memcache 10936320 May 27 16:31 frpc* -rw-r--r-- 1 lighthouse memcache 10934 May 27 16:35 frpc_full.ini -rw-r--r-- 1 lighthouse memcache 126 May 27 16:35 frpc.ini -rwxr-xr-x 1 lighthouse memcache 14032896 May 27 16:31 frps* -rw-r--r-- 1 lighthouse memcache 5560 May 27 16:35 frps_full.ini -rw-r--r-- 1 lighthouse memcache 26 May 27 16:35 frps.ini -rw-r--r-- 1 lighthouse memcache 11358 May 27 16:35 LICENSE ``` 其中:frpc和frpc.ini 是属于客户端的,也就是装在内网服务器的;frps和frps.ini 属于服务端,装在公网vps或服务器上。 ## 服务端安装 1. 把frps和frps.ini 放到某个目录。例:/opt/frp 2. 修改frps.ini 配置文件。frps_full.ini里面有详细的解释,我把我的贴出来: ```bash 1 [common] 2 bind_port = 7890 # 这个是服务器和客户端通信的主端口 3 dashboard_port = 7891 #这个端口是服务器的管理面板端口,可以查看frps服务器的情况 4 dashboard_user = maxwell #监控面板的用户名 5 dashboard_pwd = 123456 #密码 6 enable_prometheus = true #开启监控 7 vhost_http_port = 18083 #开放出去的,供外人访问的端口 8 token = big_brother #如果为了安全,可设置token,也可不射。一单设置,则在客户端也应设 ``` 3. 如果要让systemd来管理,那就造一个service: ```bash 1 [Unit] 2 Description=Frp Server Service 3 After=network.target 4 5 [Service] 6 Type=simple 7 User=nobody 8 Restart=on-failure 9 RestartSec=5s 10 ExecStart=/opt/frp/frps -c /opt/frp/frps.ini 11 12 [Install] 13 WantedBy=multi-user.target ``` 命名为frps.service,保存到/etc/systemd/system/ 下,然后设置开机就行: ```bash systemctl daemon-reload systemctl enable frps.service ``` 4. 上述所涉及到的端口,如开了防火墙,则需设置打开端口 5. 如要有安全性方面的考虑,则考虑tls证书加密传输。请参考frps配置文件。 ## 客户端(内网设备)安装 1. 参考服务器端,把frps 改为frpc,其余操作都一样; 2. 主要讲讲配置文件: ```bash [common] server_addr = 1.2.3.4 #服务器端的地址或域名,都可以 server_port = 7890 #服务器端口,务必与服务器配置一致 admin_addr = 192.168.1.3 #这个本机的,写127.0.0.1也一样 admin_port = 7891 #以下三行,不看也罢 admin_user = maxwell admin_pwd = 123456 log_file = /var/log/frpc.log #日志 tls_enable = true #这个开了以后,似乎服务器上也要开 token = dongshan #这个token要跟服务器的一致 [ssh] type = tcp local_ip = 192.168.1.3 local_port = 22 remote_port = 6000 #ssh访问的端口。以后可以用ssh root@1.2.3.4 -p 6000 访问内网了 [web] type = http local_ip = 192.168.1.3 local_port = 8081 custom_domains = web.yourdomain.com #以后要用这个域名 + 服务器开放的端口(我的上面的配置是18083)访问这个应用 # 比如,访问这个应用,就输入:web.yourdomain.com:18083 use_encryption = true ``` *( End of article )* * * * ## 我自己的配置情况 | 序号| 服务器 | 服务器供应商 | 端口|应用文件位置 | 备注 | | --- | --- | --- | --- |--- |--- | | 1 | i.disbaidu.com | 搬瓦工cn2 | 7890/7891/18083 |/opt/frp | 服务器端,有效 | | 2 | g.disbaidu.com | 南非cn2 | 7890/7891/18083 |/opt/frp | 服务器端,有效 | | 3 | passwd.top |腾讯云 | 7890/7891/18083 |/opt/frp | 服务器端,有效 | | 4 | home.disbaidu.com | 家庭宽带 |- |- | 未配置 | | 5 | 192.168.168.74 | 公司内网服务器 | 7891 | /opt/frp | 服务器端,有效 | ### 服务端配置 frps.ini (/opt/frp/) ``` ini [common] bind_port = 7890 dashboard_port = 7891 dashboard_user = maxwell dashboard_pwd = 6281613 enable_prometheus = true vhost_http_port = 18083 token = dongshan ``` ### 客户端配置 frpc.ini (/opt/frp/) ``` ini [common] server_addr = 1.117.242.66 server_port = 7890 admin_addr = 192.168.168.74 admin_port = 7891 admin_user = maxwell admin_pwd = 6281613 log_file = /var/log/frpc.log tls_enable = true token = dongshan [ssh] #ssh默认6000端口 type = tcp local_ip = 192.168.168.74 local_port = 22 remote_port = 6000 use_encryption = true use_compression = true [web] #calibre-web的应用 type = http local_ip = 192.168.168.74 local_port = 8083 custom_domains = books.regolith-linux.org.cn use_encryption = true use_compression = true [web2] #calibre的应用 type = http local_ip = 192.168.168.74 local_port = 8080 custom_domains = book.regolith-linux.org.cn use_encryption = true use_compression = true [web3] #默认端口 type = http local_ip = 192.168.168.74 local_port = 80 custom_domains = www.regolith-linux.org.cn use_encryption = true use_compression = true [web4] #远程访问linux桌面的端口 type = tcp local_ip = 192.168.168.74 local_port = 3389 remote_port = 7001 [resilio] #resilio服务 type = http local_ip = 192.168.168.74 local_port = 8888 custom_domains = sync.regolith-linux.org.cn use_encryption = true ```