基于FRP+阿里云轻量服务器实现内网穿透
第一步:在阿里云服务器上配置Frp服务端
1. 安装Frp服务端
-
下载Frp:
-
首先,在阿里云服务器上下载Frp。进入Frp的GitHub releases页面,下载适合你的系统版本(通常选择Linux版本)。
-
或者直接在阿里云服务器上执行以下命令来下载并解压:
▼bash复制代码wget https://github.com/fatedier/frp/releases/download/v0.39.1/frp_0.39.1_linux_amd64.tar.gz tar -zxvf frp_0.39.1_linux_amd64.tar.gz cd frp_0.39.1_linux_amd64注意!服务端是frps! 注意!服务端是frps! 注意!服务端是frps!
-
-
配置Frp服务端:
-
编辑
frps.ini配置文件:▼text复制代码[common] # Frp服务端的监听端口 bind_port = 7000 # Frp控制面板端口 dashboard_port = 7500 # 控制面板用户名 dashboard_user = admin # 控制面板密码 dashboard_pwd = password # 自己定义 token = ######## -
bind_port是客户端连接到Frp服务器所需的端口,dashboard_port是Frp的控制面板端口,可以在浏览器中访问查看连接状态。 -
注释必须换行写,不然会有异常导致启动失败
-
-
启动Frp服务端:
- 在当前目录中运行以下命令启动Frp服务端:
▼bash复制代码
./frps -c frps.ini
- 在当前目录中运行以下命令启动Frp服务端:
使用
nohup后台运行使用
nohup可以使程序在后台运行,即使关闭终端会话,程序也不会被终止。▼bash复制代码nohup ./frps -c frps.ini > frps.log 2>&1 &
nohup:保持程序在后台运行。> frps.log 2>&1:将输出日志写入frps.log文件。&:让程序在后台运行。查看日志:如果需要查看运行日志,可以查看
frps.log文件:▼bash复制代码tail -f frps.log
- 设置阿里云安全组:
- 登录到阿里云控制台,进入 安全组 设置,添加入站规则以开放以下端口:
7000:用于Frp客户端连接7500:用于访问Frp控制面板(可选,建议用于管理查看连接情况)9090:Frp客户端隧道连接的远程端口(或自行选择的端口)
- 登录到阿里云控制台,进入 安全组 设置,添加入站规则以开放以下端口:
轻量级服务器只需要打开防火墙即可
第二步:在内网Ubuntu机器上配置Frp客户端
1. 下载和安装Frp客户端
在内网的Ubuntu机器上,下载并解压与服务器相同版本的Frp客户端:
▼bash复制代码wget https://github.com/fatedier/frp/releases/download/v0.39.1/frp_0.39.1_linux_amd64.tar.gz tar -zxvf frp_0.39.1_linux_amd64.tar.gz cd frp_0.39.1_linux_amd64
注意!客户端是frpc! 注意!客户端是frpc! 注意!客户端是frpc!
2. 配置Frp客户端
-
编辑客户端配置文件
frpc.ini:- 在客户端目录中创建并编辑
frpc.ini,按以下配置:▼text复制代码[common] # 你的阿里云服务器公网IP server_addr = 阿里云服务器IP # 与服务端一致的连接端口 server_port = 7000 [web] type = tcp # 本地内网应用端口(如Web服务) local_port = 8080 # 公网访问端口(设置为之前在阿里云开放的端 remote_port = 9090 local_port是需要暴露的本地服务端口,例如内网的Web服务使用8080端口。remote_port则是阿里云服务器上的公网端口,访问该端口将会自动转发到内网机器上的local_port。- 注释必须换行写,不然会有异常导致启动失败
- 在客户端目录中创建并编辑
-
启动Frp客户端:
- 在内网Ubuntu机器上启动Frp客户端,执行:
▼bash复制代码
./frpc -c frpc.ini - 启动后,Frp会将阿里云服务器的
9090端口流量转发到内网Ubuntu机器上的8080端口。
- 在内网Ubuntu机器上启动Frp客户端,执行:
第三步:测试和验证
- 访问内网服务:
- 在外网环境下,通过访问
http://阿里云服务器IP:9090测试连接。如果配置无误,应该可以正常访问内网Ubuntu机器的8080端口服务。
- 在外网环境下,通过访问
- 查看Frp控制面板(可选):
- 在浏览器中访问
http://阿里云服务器IP:7500,使用之前设置的用户名和密码登录,可以查看Frp客户端连接状态和流量情况。
- 在浏览器中访问
第四步:设置Frp自启动(可选)
为方便起见,可以在内网Ubuntu机器上设置Frp客户端开机自启动。
-
创建Systemd服务: 在
/etc/systemd/system/目录下创建frpc.service文件:▼bash复制代码sudo vim /etc/systemd/system/frpc.service -
添加以下内容:
▼text复制代码[Unit] Description=Frp Client Service After=network.target [Service] Type=simple # 启动前等待15秒 ExecStartPre=/bin/sleep 15 ExecStart=/path/to/frpc -c /path/to/frpc.ini Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target将
/path/to/frpc和/path/to/frpc.ini替换为Frp客户端程序和配置文件的实际路径。 -
启动并启用服务:
▼bash复制代码sudo systemctl daemon-reload sudo systemctl start frpc sudo systemctl enable frpc
可能遇到的问题
- 端口未开放:确保阿里云安全组配置中已开放所需端口。
- 防火墙问题:检查Ubuntu内网机器上的防火墙规则,确保8080端口开放。
- Frp版本不兼容:确保客户端和服务端Frp版本一致。
- 客户端端(frpc)启动异常:服务端(frps)必须先开启,客户端(frpc)再开启!
多个端口映射的配置
以下是一个示例,展示如何配置多个不同的端口映射:
▼text复制代码[common] server_addr = 阿里云服务器IP # 你的阿里云服务器公网IP server_port = 7000 # 与服务端一致的连接端口 # 第一个端口映射(如Web服务) [web] type = tcp local_port = 8080 # 本地Web服务端口 remote_port = 9090 # 公网访问端口 # 第二个端口映射(如SSH服务) [ssh] type = tcp local_port = 22 # 本地SSH服务端口 remote_port = 9022 # 公网访问端口 # 第三个端口映射(如数据库服务) [database] type = tcp local_port = 3306 # 本地数据库服务端口 remote_port = 9033 # 公网访问端口 # 添加更多的端口映射 # [服务名称] # type = tcp # local_port = 本地服务端口 # remote_port = 公网访问端口
配置说明
- 每个映射块(如
[web]、[ssh]等)使用不同的名称。名称是唯一的,可以根据具体服务自定义。 type指定传输类型,tcp用于普通 TCP 连接,http或https可用于 HTTP/HTTPS 代理服务。local_port是内网中实际服务的端口,比如本地的 Web 服务可能运行在8080端口,而 SSH 服务运行在22端口。remote_port是对应的公网端口。要在阿里云服务器上开放这些端口,以便外网可以访问。
重启 Frp 客户端
保存配置文件后,启动 Frp 客户端,多个端口映射将自动生效:
▼bash复制代码sudo systemctl restart frpc.service
- 该命令需要设置好开机自启步骤,才能生效
测试访问
- 通过
http://阿里云服务器IP:9090访问本地的 8080 端口服务。 - 通过
ssh 用户名@阿里云服务器IP -p 9022访问内网机器的 SSH 服务(端口 22)。 - 通过
阿里云服务器IP:9033访问内网机器的数据库服务(端口 3306)。
总结
通过上述配置,你的阿里云服务器和内网机器通过Frp连接,成功实现了内网穿透。使用http://阿里云服务器IP:9090即可访问内网机器上8080端口的服务。
在 frpc.ini 配置文件中,你可以通过添加多个配置块实现多个端口的映射。每个映射可以定义一个 [代理名称]块,其中指定 local_port(内网端口)和 remote_port(映射到公网的端口)。
