我写这篇文章的目的是记录在openwrt中使用wireguard,因为没有公网IP,所以需要配合frp来反向代理我的vps来进行组网。为什么不用zerotier,可能感觉wireguard更安全吧。
- 首先,wireguard是linux内核5.10以上一般默认自带的东东。但我们是在openwrt中使用,还是需要在编译openwrt的时候选择上这个应用的。
- 由于网上有详细的介绍,我就照抄这部分wireguard的了。
以下为恩山论坛的教学文章,https://www.right.com.cn/FORUM/thread-7553422-1-1.html,没有询问是否可以转载,如有侵权,请告知,我将删除,谢谢。
一、路由端的设置
首先用SSH工具连接上路由器,我使用的工具是FinalShell,打开FinalShell,点击左上角的【文件夹】图标,点击【新建连接】按钮的图标,选择【SSH连接】
在弹出来的窗口中填写连接信息,名称任意,主机填写路由器的地址,认证方法选择【密码】,用户名和密码填写进入路由器的Web管理界面的用户名和密码,也就是路由器的管理员账号和密码,填写完成后点击【确当】按钮添加
在主页面中就可以看到刚刚添加的路由器了,点击路由器名称进行连接,弹出是否保存密钥,点击【接受并保存】
连接到路由器之后,我们需要在root文件夹下新建一个文件夹用来存储WireGuard的信息,输入一下命令新建文件夹
- cd /
- cd root
- mkdir WireGuard
复制代码
输入完以上命令后输入ls然后回车就可以看到刚刚新建的文件夹了
使用cd命令进入刚刚新建的文件夹
- cd WireGuard
复制代码
输入一下命令对文件夹设置权限
- umask 077
复制代码
为路由器端创建公钥和私钥,sprivatekey为私钥,spublickey为公钥
- wg genkey | tee sprivatekey | wg pubkey > spublickey
复制代码
输入完上面的命令后输入ls就可以看到创建的公钥和私钥了,在使用cat命令查看公钥和私钥的内容并且记录下来
- ls
- cat sprivatekey
- cat spublickey
复制代码
在浏览器打开路由器的Web管理界面,点击【网络】>【接口】>【添加新接口】
接口名称任意,我自己填写的是WG0,新接口的协议选【WireGuard virtual**】,然后点击【提交】
在【基本设置】中,把刚刚记录下来的私钥填写上去,监听端口自己指定一个,IP地址填写一个私有IP,不能与自己的局域网冲突就可以
【高级设置】保持默认
【防火墙设置】悬着【virtual**】,如果没有【virtual**】选项的就选【LAN】,我这个就没有【virtual**】选项,选好了之后点击【保持&应用】
在接口里面就可以看到刚刚新增的WG0接口了
接口新建完了之后还需要设置防火墙规则,点击【网络】>【防火墙】>【自定义规则】,把下面的命令粘贴进去,注意:192.168.5.0/24是WireGuard的网段,就是刚刚在接口里面填写的那个IP地址的网段,-o参数如果路由器的LAN口没有取消桥接就是br-lan,如果取消桥接了就是网口,例如eth0或者eth1等,如果不清楚自己的是什么可以在【网络】下的【接口】里面查看【LAN】口的名称或者网口,添加完成后点击【重启防火墙】
- iptables -t nat -A POSTROUTING -s 192.168.5.0/24 -o br-lan -j MASQUERADE
复制代码
防火墙规则自定义完成后还需要开放端口,点击【网络】>【防火墙】>【通信规则】,滑倒最下面,在名称处填写一个名称,名称自定义,协议选【UDP】,外部端口填刚刚添加新端口时填写的监听端口,填写完成后点击【添加】,然后点击【保存&应用】,如果OpenWrt是旁路有,那么需要在主路由上做端口转发,外部端口和内部端口都填刚刚新建端口时填写的监听端口,IP地址填旁路有的IP地址,协议填UDP协议。
二、创建以及配置其他用户端
回到命令模式,在WireGuard文件夹下在新建一个文件夹,这样的目的是方便管理,一个用户一个文件夹,我这里创建了一个01文件夹,创建完成后使用cd命令进入文件夹
- mkdir 01
复制代码
先给01这个用户创建一个预共享密钥并查看记录下来,这个预共享密钥不是必须的,但是有这个可以提升访问的速度,使用以下命令
- wg genpsk > sharekey
复制代码
在使用创建01用户的私钥和公钥并且查看记录下来
- wg genkey | tee cprivatekey | wg pubkey > cpublickey
复制代码
公钥和私钥都生成后返回路由器的Web管理界面,点击【网络】>【接口】并找到刚刚创建的接口然后点击【修改】
找到Peers这一项,点击【添加】,在公钥那个地方填写刚刚01用户的公钥,允许的IP填写一个IP,要和刚刚创建的新接口在同一个网段上的,但是不能冲突,勾选上路由允许的IP,最下面的【更多选项】选泽【预共享密钥】,然后点击旁边的【添加】
点击【预共享密钥】旁边的【添加】之后,就可以看到预共享密钥这个填写框了,把刚刚创建的01用户的预共享密钥填写进去,填写完成后点击【保存&应用】按钮
这样路由器这端就设置好了,只需要生成配置文件然后再其他端导入配置文件就可以使用了,如果需要外网访问的话可以做一个端口映射,如果自己没有公网地址的话可以使用FRP进行穿透,配置文件是不能自动生成的,所以需要自己用文本文档填写好然后改成conf格式的文件,配置文件的格式如下,把对应的部分替换成自己的就可以,最后一行保持默认就可以。
- [Interface]
- Address = 分配到的virtual**地址
- PrivateKey = 客户端私钥
- DNS = 路由器IP
- [Peer]
- PublicKey = 路由器端公钥
- AllowedIPs = 0.0.0.0/0
- presharedKey = 共享密钥
- Endpoint = 公网IP:端口号
- PersistentKeepalive = 25
复制代码
下面这个是我配置好的文件,可以做一个参考
- [Interface]
- Address = 192.168.5.2
- PrivateKey = WDCXBefHouhLKoAtIzZdl6PaCMZYxWuvTV4/0dPLRnw=
- DNS = 192.168.0.119
- [Peer]
- PublicKey = mAunaCFut7TsLgA5q0IRCc1ibcP8kvrA+jKvapR1x3Y=
- AllowedIPs = 0.0.0.0/0
- presharedKey = LK30DwbxuAwRfyJySRCNYEofXd5pJPeau6n87GyyeCE=
- Endpoint = 10.10.10.10:2000
- PersistentKeepalive = 25
复制代码
配置完成后点击【文件】>【另存为】,文件名为:xxx.conf,保持类型为:所有文件(*.*)
最后把这个文件导入到用户端使用就可以了。
以上是wireguard的用法,下面就是frp反向代理的具体操作方法了。也是从别人那里转发的,没经过同意,如果有问题,请告知,我将删除。原地址:第023期 两种方法搭建FRP内网穿透服务器|附防火墙设置避坑指南 – First Sunlight (126126.xyz)

视频连接
本期视频内容
本期视频给大家介绍两种方法搭建FRP内网穿透服务器,一种方法是使用Docker,另外一种方法是直接创建服务。 视频的最后会讲一下防火墙的设置,这也是萌新经常遇到的一个坑。
免费FRP服务器信息
服务器模板文件frps.ini
[common]
bind_addr = 0.0.0.0
bind_port = 7000
vhost_http_port = 80
vhost_https_port = 443
dashboard_addr = 0.0.0.0
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = yourpassowrd
token = 1234567890
allow_ports = 10001-50000
subdomain_host = your.subdomain
Docker代码
docker run --restart=always \
--network host -d \
-v /etc/frp/frps.ini:/etc/frp/frps.ini \
--name frps \
snowdreamtech/frps
直接创建FRP服务
# 下载
curl -L -o frp_0.37.1_linux_amd64.tar.gz https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_amd64.tar.gz
# 解压
tar -zxvf frp_0.37.1_linux_amd64.tar.gz
# 复制文件
cp frp_0.37.1_linux_amd64/frps /usr/bin
cp frp_0.37.1_linux_amd64/systemd/frps.service /usr/lib/systemd/system
# 修改配置
sed -i 's/^User=nobody/# &/' /usr/lib/systemd/system/frps.service
# 启动服务
systemctl enable frps
systemctl start frps
# 查看服务状态
systemctl status frps
防火墙设置
- RedHat/CentOS
firewall-cmd --state
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --permanent --zone=public --add-port=7000/tcp
firewall-cmd --permanent --zone=public --add-port=7500/tcp
firewall-cmd --permanent --zone=public --add-port=10001-50000/tcp
firewall-cmd --permanent --zone=public --add-port=10001-50000/udp
firewall-cmd --reload
- Debian/Ubuntu
ufw status
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 7000/tcp
ufw allow 7500/tcp
ufw allow 10001:50000/tcp
ufw allow 10001:50000/udp
- 其他
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -p tcp --dport 7000 -j ACCEPT
iptables -I INPUT -p tcp --dport 7500 -j ACCEPT
iptables -I INPUT -p tcp --dport 10001:50000 -j ACCEPT
iptables -I INPUT -p udp --dport 10001:50000 -j ACCEPT