frp over wirguard

21 天前(已编辑)
/ ,
11
摘要
本文主要讲述在无法直接进行frp传输(例如禁止并主动探测frp流量)的情况下,使用wireguard(wg-quick)对frp流量进行加密的方法。

第一章 准备

1.1. 准备

由于我个人有其他使用场景,因此加密通过树莓派中转服务器。

  • 服务器(any)
  • 客户端(any)
  • (可选)中转服务器

1.2. 原理

frp over wirguard


第二章 搭建

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穿透。

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...