使用frp反向代理进行局域网穿透(访问内网服务器)

  • 内网穿透需求
    有一台在局域网内的服务器,外网无法访问,利用VPS或者具有公网IP的实体机进行转发,实现局域网外访问该服务器。本次配置局域网和公网系统均为Linux(ubuntu 16.04)。
  • 需要准备VPS和frp软件
    Server 1:校内服务器,外网无法访问;
    Server 2:具有公网IP的VPS(腾讯云、华为云或阿里云等);
    frp软件:可在其GitHub按照系统版本下载。
  • 软件下载与安装
    在服务端(server 1)和客户端(server 2)两个ubuntu系统均下载和解压frp。
# 获取系统版本,我的server 1和2均为ubuntu x86_64 arch # 下载并解压 wget https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz tar -zxvf frp_0.36.2_linux_amd64.tar.gz mv frp_0.36.2_linux_amd64 frp ls frp/

-rwxrwxr-x 1 1000 1000 9.5M Mar 22 07:00 frpc # c结尾为客户端程序
-rw-rw-r-- 1 1000 1000 9.3K Mar 22 07:02 frpc_full.ini
-rw-rw-r-- 1 1000 1000 126 Mar 22 07:02 frpc.ini # c结尾为客户端配置文件
-rwxrwxr-x 1 1000 1000 13M Mar 22 07:00 frps # s结尾为服务端程序
-rw-rw-r-- 1 1000 1000 5.0K Mar 22 07:02 frps_full.ini
-rw-rw-r-- 1 1000 1000 116 Mar 29 02:59 frps.ini # s结尾为服务端配置文件
-rw-rw-r-- 1 1000 1000 12K Mar 22 07:02 LICENSE
drwxrwxr-x 2 1000 1000 4.0K Mar 22 07:02 systemd
服务端(server 1)需要配置“frps.ini”文件;客户端(server 2)需要配置“frpc.ini”文件。
  • 服务端配置
    按照以下配置修改“frps.ini”文件:
[common] bind_port = 7000 dashboard_port = 7500 token = 987654321 dashboard_user = admin dashboard_pwd = admin

【使用frp反向代理进行局域网穿透(访问内网服务器)】如果没有必要,端口均可使用默认值,token、user和password项请自行设置。
-- “bind_port”表示用于客户端和服务端连接的端口,这个端口号我们之后在配置客户端的时候要用到。
-- “dashboard_port”是服务端仪表板的端口,若使用7500端口,在配置完成服务启动后可以通过浏览器访问 x.x.x.x:7500 (其中x.x.x.x为VPS的IP)查看frp服务运行信息。
-- “token”是用于客户端和服务端连接的口令,请自行设置并记录,稍后会用到。
-- “dashboard_user”和“dashboard_pwd”表示打开仪表板页面登录的用户名和密码,自行设置即可。
配置完成后,运行./frps -c frps.ini,会得到如下输出说明开启成功:
2021/03/29 03:02:05 [I] [root.go:200] frps uses config file: frps.ini 2021/03/29 03:02:05 [I] [service.go:192] frps tcp listen on 0.0.0.0:7000 2021/03/29 03:02:05 [I] [service.go:294] Dashboard listen on 0.0.0.0:7500 2021/03/29 03:02:05 [I] [root.go:209] frps started successfully

然后,可以运行nohup ./frps -c frps.ini &将程序放在后台。可以通过浏览器访问 x.x.x.x:7500 (其中x.x.x.x为VPS的IP)查看frp服务运行信息。
  • 客户端配置
    接下来,按照如下信息在server 2(内网)配置客户端:vim frpc.ini
[common] server_addr = x.x.x.x server_port = 7000 token = 987654321[ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000

-- “server_addr”为服务端IP地址,填入即可。
-- “server_port”为服务器端口,填入你设置的端口号即可,如果未改变就是7000
-- “token”是你在服务器上设置的连接口令,原样填入即可。
配置好后直接运行./frpc -c ./frpc.ini,输出如下说明运行成功。
2021/03/29 11:30:33 [I] [service.go:304] [d69b2a6a76e9aacd] login to server success, get run id [d69b2a6a76e9aacd], server udp port [0] 2021/03/29 11:30:33 [I] [proxy_manager.go:144] [d69b2a6a76e9aacd] proxy added: [ssh] 2021/03/29 11:30:33 [I] [control.go:180] [d69b2a6a76e9aacd] [ssh] start proxy success

然后直接nohup ./frpc -c frpc.ini &把程序放后台。
在外网时,直接运行ssh -oPort=6000 username_server1@x.x.x.x即可直接登录。
x.x.x.x 为服务端(server 2)的IP地址;username_server1为内网server 1中的用户名,输入的密码也为该用户密码。
参考:
[1] 使用frp进行内网穿透
[2] 内网穿透-在家访问校园服务器

    推荐阅读