【玩转Lighthouse】小白也能FRP内网穿透配置和使用

2022-04-15 13:28:27 浏览数 (1)

前言

有时候在想互联网互联网,为什么在异地没有办法通过网络连接家里的NAS,远程控制家里的电脑呢 ? 网上一顿恶补学习,原来是没有分配到 基于 IPV4 的公网 IP,而动态公网 IP 申请 还不一定能成功。 解决的办法可以 使用 基于 IPV6 的公网IP 远程连接 或 使用本文所介绍的FRP进行内网穿透。

FRP介绍

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

  1. GitHub 地址
  2. 官方文档

从文档中可以了解到,要使用 FRP 就必须要有一个具备公网 IP 的服务器才能来进行内网穿透的功能。

所有接下来就是购买带有公网的服务器。

选购服务器

以轻量应用服务器举例,进入购买页面

轻量应用服务器 点击立即选购

选择与自己网络连接性比较好的或区域相靠近的地域,和选择所需要的系统,配置,购买时长等等(按需求所购买)

当然,你也可以去看看腾讯云的活动价格(优惠比较大,推荐尝试)

轻量应用服务器 点击图中位置

购买方式大同小异,自己选择购买即可。

配置服务器

购买完成后,点击右上角的控制台

点击 轻量应用服务器 进入面板

这里就可以看到购买过的服务器,点击可以进入管理面板

管理面板可以查看服务器的配置详情,网络监控,资源使用情况。系统重装等等实用功能

从标处 1 可以知道服务器的 公网IP 地址(记下来),现在点击标处 2 修改服务器的 ssh 密码

继续记住箭头处的用户名,和输入新的密码。点击下一步,机器可能会重启,等待重启即可。

连接服务器

打开ssh工具(推荐putty或xshell)

输入之前记下来的 公网IP 地址,点击 open (会弹出是否保存公钥的窗口,点击是即可)

输入之前记下来的 用户名 ,回车

输入之前修改的 密码 ,回车 (注意密码不会明文显示)

看见 ~ $ 就表示登录成功了

没有 putty 也可以试试 系统的 cmd 看看有没有 ssh 服务

按下 win键 r键

输入cmd 并回车

输入以下命令 并回车

代码语言:javascript复制
ssh ubuntu@xxx.xxx.xxx.xxx    

注意 xxx.xxx.xxx.xxx 为 服务器公网IP

输入 yes 并回车

输入 密码 并回车(注意密码不会明文显示)

也是显示 $ 号表示登录成功

下载 FRP 执行文件

打开 FRP 的下载页面

移动到箭头所在连接,鼠标右键选择复制连接地址

回到 ssh ,输入

代码语言:javascript复制
sudo -i 

进入超级管理用户

输入

代码语言:javascript复制
wget https://github.com/fatedier/frp/releases/download/v0.41.0/frp_0.41.0_linux_amd64.tar.gz

下载

输入

代码语言:javascript复制
tar -zxvf frp_0.41.0_linux_amd64.tar.gz

将tar包解压缩

移动至/usr/local

代码语言:javascript复制
mkdir /usr/local/frp
mv frp_0.41.0_linux_amd64/* /usr/local/frp/

文件说明

frps.ini: 服务端配置文件

frps: 服务端软件

frpc.ini: 客户端配置文件

frpc: 客户端软件

配置systemctl服务端运行

vi 新建文件并写入配置内容

代码语言:javascript复制
vi /etc/systemd/system/frp.service
代码语言:javascript复制
按下英文 i 键 ,进入编辑模式

写入以下内容,注意上文移动放置的路径和此处有关。这里是启动的服务端。

代码语言:javascript复制
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=simple
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
StandardOutput=syslog
StandardError=inherit

[Install]
WantedBy=multi-user.target
代码语言:javascript复制
按英文 :号键,输入wq回车 ,保存并退出

重新加载服务的配置文件

代码语言:javascript复制
systemctl daemon-reload

systemctl 命令查看

代码语言:javascript复制
systemctl start frp                     # 启动 frp
systemctl stop frp                      # 停止 frp 
systemctl restart frp                   # 重启 frp
systemctl status frp                    # 查看 frp 状态
systemctl enable frp                    # 开机自启 frp
systemctl disable frp                   # 关闭开机自启 frp

配置 FRP 服务端

编辑服务端配置文件

代码语言:javascript复制
vi /usr/local/frp/frps.ini
代码语言:javascript复制
按英文 i 键,进入编辑模式
代码语言:javascript复制
bind_port = 7000            # 此处为 frp 服务端口,可自行修改
token = 123                 # 此处为 frp 密码,可自行修改(如没有这行也可以自行添加)
代码语言:javascript复制
按英文 :号键,输入wq回车 ,保存并退出

启动FRP服务端并设置开机启动

代码语言:javascript复制
systemctl start frp                     # 启动 frp
systemctl enable frp                    # 开机自启 frp

配置 FRP 客户端

客户端可以配置在内网的任意一设备上,因为有长时间不断运行的需求,所以我选择了NAS。(可以不关机)其他设备配置也大同小异。

1. 下载页面 下载合适架构的客户端

2. 上传tar包 至 NAS

3. 解压缩 tar包

文件说明

frps.ini: 服务端配置文件

frps: 服务端软件

frpc.ini: 客户端配置文件

frpc: 客户端软件

配置客户端

代码语言:javascript复制
vi frpc.ini

示例

代码语言:javascript复制
[common]
server_addr = 之前的服务器公网IP   
server_port = 7000                    # 之前设置的 frp 服务端端口   
token = 123                           # 之前设置的 frp 密码 
[ssh]
type = tcp
local_ip = 127.0.0.1                  # 客户端本地 IP
local_port = 22                       # 客户端本地端口号
remote_port = 6000                    # 远程frp服务器的tcp服务端口号

保存并退出

开启服务器远程端口

轻量应用服务器自带的防火墙默认关闭其他端口,可能需要进入管理面板打开所需的端口号

如图所示,自行添加放行的端口

启动

代码语言:javascript复制
# 后台启动
nohup ./frpc -c ./frpc.ini &

测试连接内网SSH

完成上面所有步骤,顺便测试一下。使用不同的网络设备打开ssh访问内网的NAS

输入远程frp服务器ip 远程frp服务器的tcp服务端口号

输入用户,密码

登录成功。。。。

更多

同一IP段下,可以使用客户端访问其他设备

客户端配置示例

代码语言:javascript复制
[common]
server_addr = 之前的服务器公网IP   
server_port = 7000                    # 之前设置的 frp 服务端端口   
token = 123                           # 之前设置的 frp 密码 
[ssh]
type = tcp
local_ip = 127.0.0.1                  # 客户端本地 IP
local_port = 22                       # 客户端本地端口号
remote_port = 6000                    # 远程frp服务器的tcp服务端口号
[RDP]
type = tcp
local_ip = 192.168.2.184              # 同一IP段下,其他设备的内网IP地址
local_port = 3389                     # 端口
remote_port = 6001                    # 远程frp服务器的tcp服务端口号
[...]
...
...
...
...
[...]
...
...
...
...

其他参考官方文档

0 人点赞