不废话,直入主题。我家是移动200M宽带。网络设备连接为光猫桥接,openwrt软路由拨号,其他设备都连在软路由下。前几天搞了群晖的ipv6 DDNS,无奈公司网络只有ipv4没有ipv6,无法通过ipv6公网地址访问群晖。我手头又刚好有个nat vps,于是决定尝试一下frp内网穿透。
1,服务器端配置
此处为frp的github网址
服务器端配置很简单,先通过ssh登录vps,然后输入以下命令:
wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz
tar -zxvf frp_0.33.0_linux_amd64.tar.gz
mv frp_0.33.0_linux_amd64 frp
cd frp
rm -rf frpc*
然后修改配置文件
vi frps.ini
主要配置frp的通信端口号以及密钥,按i键进入输入模式,修改完成后按Esc键,然后输入:wq回车保存文件。由于我的nat vps只开放了23000以后的端口,因此frp端口号设为23001。最终frps.ini文件如下:
[common]
bind_port = 23001 #通信端口
token = 123456 #密钥
启动服务端服务:
./frps -c ./frps.ini
2,客户端设置
进入openwrt ssh界面。输入如下命令:
wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_arm64.tar.gz
tar -zxvf frp_0.33.0_linux_arm64.tar.gz
mv frp_0.33.0_linux_arm64 frp
cd frp
rm -rf frps*
修改配置文件
vi frps.ini
这里可以配置多个端口映射服务。我设置了三个,一个是软路由的ssh端口,一个是群晖5000端口,一个是jellyfin的8096端口。我的frpc.ini配置如下:
[common]
server_addr = nat.vps.com #服务器域名或者公网ip,这里填的是我nat vps的外网域名
server_port = 23001 #与服务端bind_port一致
token = 123456 #与服务端密钥对应
[ssh]
type = tcp #连接协议
local_ip = 127.0.0.1 #表示本地主机
local_port = 22 #内部的ssh端口号
remote_port = 23002 #自定义外部端口
[DSM]
type = tcp #连接协议
local_ip = 192.168.1.2 #群晖的内网ip地址
local_port = 5000 #群晖的5000端口
remote_port = 23003 #自定义外部端口
[Jellyfin]
type = tcp #连接协议
local_ip = 192.168.1.2 #群晖的内网ip地址
local_port = 8096 #jellyfin的8096端口
remote_port = 23004 #自定义外部端口
启动客户端服务:
./frps -c ./frps.ini
3,内网穿透访问群晖
浏览器输入nat.vps.com:23003访问群晖,nat.vps.com:23004访问jellyfin。
4,设置frp自启动
(1)服务端采用systemctl来控制启动。进入vps的ssh,输入下面命令修改文件。
vi /lib/systemd/system/frps.service
修改后的文件如下:
[Unit]
Description=frp service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
ExecStart=/root/frp/frps -c /root/frp/frps.ini #注意文件路径
[Install]
WantedBy=multi-user.target
然后输入下面两行命令,第一行用来开启服务,第二行用来设置启动时自动运行。
systemctl start frps
systemctl enable frps
如果想停止,输入
systemctl stop frps
(2)客户端由于是openwrt软路由,操作方法不同。
输入以下命令修改文件:
vi /etc/init.d/frpc
修改后的文件如下:
#!/bin/sh /etc/rc.common
START=90
STOP=90
SERVICE=frpc
USE_PROCD=1
PROC="/root/frp/frpc -c /root/frp/frpc.ini" #注意文件路径
start_service()
{
procd_open_instance
procd_set_param command $PROC
procd_set_param respawn
procd_close_instance
}
service_triggers()
{
procd_add_reload_trigger "rpcd"
}
最后输入命令开启服务以及设置自启动。
chmod 777 frpc
/etc/init.d/frpc enable
/etc/init.d/frpc start