前言
有时候在想互联网互联网,为什么在异地没有办法通过网络连接家里的NAS,远程控制家里的电脑呢 ? 网上一顿恶补学习,原来是没有分配到 基于 IPV4 的公网 IP,而动态公网 IP 申请 还不一定能成功。 解决的办法可以 使用 基于 IPV6 的公网IP 远程连接 或 使用本文所介绍的FRP进行内网穿透。
FRP介绍
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
- GitHub 地址
- 官方文档
从文档中可以了解到,要使用 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服务端口号
[...]
...
...
...
...
[...]
...
...
...
...
其他参考官方文档