摘要
本文主要讲述在无法直接进行frp传输(例如禁止并主动探测frp流量)的情况下,使用wireguard(wg-quick)对frp流量进行加密的方法。
第一章 准备
1.1. 准备
由于我个人有其他使用场景,因此加密通过树莓派中转服务器。
- 服务器(any)
- 客户端(any)
- (可选)中转服务器
1.2. 原理
第二章 搭建
2.1. 搭建wireguard
2.1.1. 客户端(中转服务器)
首先,安装wireguard
sudo add-apt-repository ppa:wireguard/wireguard
sudo apt-get update
sudo apt-get install wireguard
由于我们之后需要使用到一对公私钥,因此我们先进入对应目录生成公私钥。(我们应在客户端和服务端都生成)
sudo mkdir -p /etc/wireguard && sudo chmod 0777 /etc/wireguard && cd /etc/wireguard
umask 077
wg genkey | tee private.key | wg pubkey > public.key
wireguard默认将配置文件放置于/etc/wireguard/
中,通过wg-quick 文件名
可以快速设置虚拟网卡。
此处,我们设置文件wg0.conf
nano /etc/wireguard/wg0.conf
按照wireguard官网配置进行进行编写
[Interface]
PrivateKey =
Address = 10.0.8.10/24
MTU = 1420
[Peer]
PublicKey =
Endpoint = ip:port
AllowedIPs = 10.0.8.1/32
PersistentKeepalive = 30
你可以通过 wgredlong/WireGuard 查看对应配置,此处不过多说。
配置完成后使用以下指令进行启动或关闭
wg-quick up wg0
wg-quick down wg0
!注意:如果你在设置时中转出现了无法上网或者其他问题,请注意ip段填写是否写好 /32或者/24。
2.1.2. 服务端
由于wireguard只存在本端和对端,因此服务器配置和客户端配置相同。不过我做了一些改变以供参考。
[Interface]
PrivateKey =
Address = 10.0.8.1/24
PostUp = iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT; iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT; iptables -t nat ->
PostDown = iptables -D FORWARD -i wg0 -o eth0 -j ACCEPT; iptables -D FORWARD -i eth0 -o wg0 -j ACCEPT; iptables -t nat ->
ListenPort =
MTU = 1420
[Peer]
PublicKey =
AllowedIPs = 10.0.8.10/24
2.2. 搭建frp
2.2.1. 客户端
从github官网下载frp。(可以在官网找到最新版本)
cd && mkdir frp && cd frp wget https://github.com/fatedier/frp/releases/download/v0.45.0/frp_0.45.0_linux_arm64.tar.gz && tar -zxf frp_0.45.0_linux_arm64.tar.gz
编辑对应配置(客户端为frpc,服务端为frps)
[common]
server_addr = 10.0.8.1
server_port =
token =
tcp_mux = true
log_file = frpc.log
log_level = info
log_max_days = 3
authentication_timeout = 0
[rdp]
type = tcp
local_ip =
local_port = 3389
remote_port =
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port =
其中common段应当填写对端服务器的wireguard信息。
其他部分按照自己需要转发的服务填写,其中local_ip可以填写本地其他ip地址(即非raspi本身)。
配置好后我们可以使用frpc -c frpc.ini
进行测试。
2.2.2. 服务端
首先需要下载frp。
配置frps.ini
文件如下
[common]
bind_port = 15151
dashboard_port = 15150
dashboard_user =
dashboard_pwd =
token =
tcp_mux = true
log_file = /root/frp/frps.log
log_level = info
log_max_days = 3
authentication_timeout = 0
privilege_mode = true
配置好后我们可以使用frps -c frps.ini
进行测试。
2.2.3. 设置开机启动
以服务端为例,客户端将frps修改为frpc即可。
# 需要先 cd 到 frp 解压目录.
# 复制文件
cp frps /usr/local/bin/frps
mkdir /etc/frp
cp frps.ini /etc/frp/frps.ini
# 编写 frp service 文件
nano /usr/lib/systemd/system/frps.service
# frps.service内容如下
[Unit]
Description=frps
After=network.target
[Service]
TimeoutStartSec=30
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.ini
ExecStop=/bin/kill $MAINPID
[Install]
WantedBy=multi-user.target
# 启动 frp 并设置开机启动
systemctl enable frps
systemctl start frps
systemctl status frps
# 部分服务器上,可能需要加 .service 后缀来操作,即:
systemctl enable frps.service
systemctl start frps.service
systemctl status frps.service
设置完成后,即可进行frp穿透。