荣耀之链论坛

 找回密码
 立即注册
搜索
查看: 889|回复: 13

wireguard教程

[复制链接]

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
发表于 2023-6-9 18:17 | 显示全部楼层 |阅读模式
我用centos7装的全新的系统

安装: https://www.wireguard.com/install/
yum install epel-release elrepo-release
yum install yum-plugin-elrepo
yum install kmod-wireguard wireguard-tools

###############################################################
2025-01-15 用华为云的一台2H4G的轻量,系统选的centos8.2
然后常规方式无法安装
我用这个方式安装的

用wg官网的centos8的第三种方法装好了
yum install epel-release
yum config-manager --set-enabled PowerTools
yum copr enable jdoss/wireguard
yum install wireguard-dkms wireguard-tools
###############################################################
2025-02-12 一台2H4G的Rocky_8.9_x64
yum install elrepo-release epel-release
yum install kmod-wireguard wireguard-tools #这条命令卡住了 ,被云服务器厂家的防火墙阻断了

我大概知道是什么原因了,国内的云服务器商家,因为合规性要求,提供的centos8系统都是魔改过的
只能用上面华为云的安装方式安装

这台服务器即使安装了,也找不到模块,内核版本是4.18的
我估计是底层防火墙就直接删了wireguard的包






配置: https://www.wireguard.com/quickstart/
A:
ip link add dev wg0 type wireguard
ip address add dev wg0 192.168.2.1/32
ip address add dev wg0 192.168.2.1 peer 192.168.2.2
ip address add dev wg0 192.168.2.1 peer 192.168.2.3   #这里有几个peer这里就要弄几条 不然的话对方能连上,但是网络是不通的 我观察过,添加了这个peer就是添加了一条路由表 这条命令是我最后做三角形网络的时候额外输入的 前期AB互联不需要这个
生成conf文件
cd /etc/wireguard/
wg genkey | tee privatekey | wg pubkey > publickey

vi custom.conf  #这里需要新建配置文件

[Interface]
PrivateKey = MIWUc1ptjwoJqH1b/gij7tbNhA8bDLwy1vqMs4A/UlQ=  #私钥填自己的
ListenPort = 51820

[Peer]
PublicKey = 8bsgsg0hOPFGOIwMzTb5oVTb37YKA0aE+adImV06ajY=  #公钥填对方的
Endpoint = 192.168.11.160:51820        #这里的IP填对方的公网IP,比如用的阿里云要填公网IP,我这里演示用的内网所以就直接填网卡的IP了
AllowedIPs = 192.168.2.2/32                #这个表示发往这个地址的数据包走wireguard


wg setconf wg0 custom.conf
ip link set up dev wg0

firewall-cmd --permanent --zone=public --add-port=51820/udp
firewall-cmd --zone=public --add-port=51820/udp

B:
ip link add dev wg0 type wireguard
ip address add dev wg0 192.168.2.2/32
ip address add dev wg0 192.168.2.2 peer 192.168.2.1
ip address add dev wg0 192.168.2.2 peer 192.168.2.3    #不同的节点之间注意IP 这条命令是我最后做三角形网络的时候额外输入的 前期AB互联不需要这个
生成conf文件
cd /etc/wireguard/
wg genkey | tee privatekey | wg pubkey > publickey

vi custom.conf  #这里需要新建配置文件

[Interface]
PrivateKey = IA2r48tVzUT8Z6bOvdv9VRW4QlrWPZKnSjJx6sBeDWk=
ListenPort = 51820

[Peer]
PublicKey = ffqjR7FR8Ki0nwXWPgw/Q83Wb4TluIH//VRyZNxongA=
Endpoint = 192.168.11.159:51820
AllowedIPs = 192.168.2.1/32

wg setconf wg0 custom.conf
ip link set up dev wg0
firewall-cmd --permanent --zone=public --add-port=51820/udp
firewall-cmd --zone=public --add-port=51820/udp

ping测试
ping 192.168.11.160 延迟0.4毫秒
ping 192.168.2.2 延迟0.8毫秒 说明是通过wireguard访问的

然后再A上开启转发
firewall-cmd --permanent --zone=public --add-masquerade
firewall-cmd --zone=public --add-masquerade
用一台虚拟机,把网关设置为A
然后这台虚拟机ping 192.168.2.2  成功了

然后用traceroute 192.168.0.1(这个是我光猫的IP)命令,查看,走的是正常出口,因为上面的配置文件allowedips只有对面的IP
现在测试把allowedips增加0.0.0.0/0,试试效果
首先需要把B也开启转发(我ping的是光猫的IP,如果B不开转发,数据包到B的时候就会被丢弃了,就看不到效果了)
然后修改A的配置文件里面的allowedips为AllowedIPs = 192.168.2.2/32,0.0.0.0/0
修改完毕重新加载配置
wg syncconf wg0 custom.conf
同时还需要修改路由,让默认路由走wg的接口
默认路由 不用管他 我们手动添加一条路由
route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.2.2 metric 1  #注意,metric一定要小于之前的默认路由
再测试traceroute命令,就发现通过wireguard转发了


我怀疑是不是上面的wg0的IP设置错了,这样是不是直接内网交换机转发的? 修改掩码试试 这个测试是因为我最开始用的是/24的掩码,我以为他们互相之间都是可以内网互通的,后来才懂,type限制了

ifconfig wg0 down
ip addr del 192.168.2.1/24 dev wg0
ip addr change 192.168.2.1/32 dev wg0
ifconfig wg0 up

ifconfig wg0 down
ip addr del 192.168.2.2/24 dev wg0
ip addr change 192.168.2.2/32 dev wg0
ifconfig wg0 up

还不死心就reboot一下
额,原来重启配置都没了,那更好了
直接重新配置,除了不需要重新生成密钥,把子网掩码改为32位的
实测成功
添加了路由表以后确实走另外一台了


再次测试不要0.0.0.0/0试试
实测不要0.0.0.0/0用作测试的虚拟机就上不去网了(这个结论的前提是A添加了路由表所有流量通过wg走B)
然后添加了0.0.0.0/0以后就瞬间好了

最后测试先不启动wg 直接link up 看看能否通
不通

最最后测试 直接用不同网段的IP试试
竟然真的可以
A用192.168.2.1/32
B用10.0.0.2/32
然后他们之间也能建立wg
看了看路由表,有这条
10.0.0.2 dev wg0 proto kernel scope link src 192.168.2.1
然后测试客户端所有流量都走wg 添加路由表route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.0.0.2 metric 1
测试成功
结论:双方的IP完全可以随意填写,不过为了方便管理,建议还是用同网段的吧
测试了用公网IP也是可以的,也就是说这个IP真的就是随便填了
应该是只要不和自己的以及对方的内网冲突就行,因为如果冲突了就不方便组网了 比如A公司内网192.168.0.0/24  然后B公司内网也是192.168.0.0/24 同时他们内部还有的电脑获取了同一个IP,这样组网就不方便了

最最后,学一下link添加一个同网段的IP试试
ip link add dev wg1  type wireguard
ip address add dev wg1 192.168.3.1/24
ip link set up dev wg1

ip link add dev wg1  type wireguard
ip address add dev wg1 192.168.3.2/24
ip link set up dev wg1

ping的时候提示
ping: sendmsg: Required key not available

最后测试删掉type
提示需要指定type
然后查看了一下ip link help
原来可以直接添加这么多种类型的接口


至此,wireguard学习完毕
真的是非常简单啊

写这个教程前我还用docker安装过,实测docker对内核的要求比较高
我用rockylinux8失败 直接就启动不了
然后用rockylinux9也失败了,提示iptables找不到filter,这就是因为最新的linux内核已经不默认用iptables用的是nftables
所以我放弃用docker而是直接安装了



再补充,我今天又用windows测试了 添加了一台windows的wireguard
很简单,安装完毕以后
新建一个连接配置这样填
[Interface]
PrivateKey = 2H6AUo3TKTayvpFdqdSPUpBGlHgCMMxFM7Lz+GrqnFw=
ListenPort = 51820
Address = 192.168.2.3/32

[Peer]
PublicKey = ffqjR7FR8Ki0nwXWPgw/Q83Wb4TluIH//VRyZNxongA=
AllowedIPs = 192.168.2.1/32, 0.0.0.0/1, 128.0.0.0/1     
Endpoint = 192.168.11.159:51820

#注意,如果AllowedIPs填0.0.0.0/0的话
软件下面会自动出现"拦截未经隧道的流量",并且已经打勾
这样windows就ping不通自己内网里面的其他电脑了
把勾取消,配置就自动变为目前显示的这样0.0.0.0/1, 128.0.0.0/1
这样的状态就是表示内网直连的不走wg,然后其他所有流量都走wg
(懂了,原来127.0.0.0/8是特殊的网段,然后127的二进制表示是0111 11111 )
(可以看看这个提问https://unix.stackexchange.com/q ... 0-0-0-1-and-default)


一般来说,windows用wg都是仅仅用于家里访问公司的内网,这个AllowedIPs只需要填peer的IP和公司内网的网段就行了

上面的这个配置文件表示这个windows通过peer访问外网
如果公网服务器是windows,只是当作节点用的话
则配置文件看起来是这样的
[Interface]
PrivateKey = 2H6AUo3TKTayvpFdqdSPUpBGlHgCMMxFM7Lz+GrqnFw=
ListenPort = 51820
Address = 192.168.2.3/32

[Peer]
PublicKey = ffqjR7FR8Ki0nwXWPgw/Q83Wb4TluIH//VRyZNxongA=
AllowedIPs = 192.168.2.1/32
Endpoint = 192.168.11.159:51820

[Peer]
PublicKey = 8bsgsg0hOPFGOIwMzTb5oVTb37YKA0aE+adImV06ajY=
AllowedIPs = 192.168.2.2/32
Endpoint = 192.168.11.160:51820

这个配置是最后做了个三角形的网络的

AllowedIPs这里一定要慎重
如果有多个peer,而你在其中一个peer的AllowedIPs那里填了多个网段
那么这个特殊节点连接上以后,你多填的网段也会强制走这个节点,这样可能会导致其他节点无法连接

比如下面这个配置文件
[Interface]
PrivateKey = 2H6AUo3TKTayvpFdqdSPUpBGlHgCMMxFM7Lz+GrqnFw=
ListenPort = 51820
Address = 192.168.2.3/32

[Peer]
PublicKey = ffqjR7FR8Ki0nwXWPgw/Q83Wb4TluIH//VRyZNxongA=
AllowedIPs = 192.168.2.1/32, 0.0.0.0/1, 128.0.0.0/1  
Endpoint = 192.168.11.159:51820

[Peer]
PublicKey = 8bsgsg0hOPFGOIwMzTb5oVTb37YKA0aE+adImV06ajY=
AllowedIPs = 192.168.2.2/32
Endpoint = 192.168.11.160:51820

这个就是连接了Endpoint = 192.168.11.159:51820以后 所有的流量就都走这里了,然后下面的那个peer就无法连接了


基本上就是这些了

最后如果把一个linux节点当路由器,需要进行流量分流的时候
可以使用iptables+fwmark 然后配合路由表


最后再补充一点我测试的
断开连接,然后我把这个
PublicKey = ffqjR7FR8Ki0nwXWPgw/Q83Wb4TluIH//VRyZNxongA=
随机修改了一位,把倒数第2位的A改为B结果整条就变红了,然后我保存以后再看他自动变为了A

又测试了一下,大概懂了
我估计=表示终止符,前面最后一位应该是校验,这一串密钥改为F和I也都能校验通过
再前面的就是真的密钥了
但是我也不确定是不是这样,密钥生成是不是有一定规律的


回复

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2023-6-10 11:50 | 显示全部楼层
配置文件里面还可以设置MTU
不过我感觉所有的配置应该都是有默认值的
比如有个保活的参数默认间隔是15秒
这个MTU估计也有默认值,一般情况下就不需要动了

真有需求的,可以看看官网的文档

我这个配置文件是最最精简的了,所有的都是必须的
回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2023-6-10 19:04 | 显示全部楼层
测试wireguard的转发
A模拟腾讯云服务器 把33890转到B的B的3389
B模拟内网机器,然后B做端口转发 3389转到11.90的3389
然后C是windows客户端,访问A的33890端口,看看是否能正常转发到B

A
iptables -t nat -I PREROUTING 1 -p tcp --dport 33890 -j DNAT --to 192.168.2.2:3389
B
iptables -t nat -I PREROUTING 1 -p tcp --dport 3389 -j DNAT --to 192.168.11.78:3389
C直接mstsc 192.168.11.159 成功了
回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2023-6-10 19:42 | 显示全部楼层
这一层是我研究分流的时候写的 不需要看,只需要看最下面的结论


测试网络分流
iptables+fwmark
A当路由器
B当远程服务器
C是windows网关指向A
然后在A上面配置分流 访问192.168.0.1走B 其他正常
1.打标
iptables -t mangle -I PREROUTING 1 -i eth1 -d 192.168.0.1 -j MARK --set-mark 0x2
iptables -t mangle -I OUTPUT 1 -d 192.168.0.1 -j MARK --set-mark 0x2
iptables -t mangle -vnL

iptables -I OUTPUT 1 -d 192.168.0.1 -j MARK --set-mark 0x2

iptables -t mangle -R PREROUTING 1 -i eth1 -s 192.168.10.177 -j MARK --set-mark 0x2 #出去的包打标了
iptables -t mangle -I PREROUTING 2 -i wg0 -j MARK --set-mark 0x2 #不行,回来的包不能打标
iptables -t mangle -D PREROUTING 1
2.添加路由
ip route add 0.0.0.0/0 via 192.168.2.2 dev wg0 table 101
ip route add 0.0.0.0/0 via 192.168.11.3 dev eth0 table 101
ip route show table 101

ip route add default via 192.168.2.2 dev wg0 proto static metric 5 table 101
route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.2.2 metric 100 table 101

main的默认路由
default via 192.168.11.3 dev eth0 proto static metric 100

3.指定规则,让打标的包走101
ip rule add from 192.168.10.177 fwmark 0x2 lookup 101
ip rule add from all fwmark 0x2 lookup 101
ip rule


预估的结论是C用tracert 192.168.0.1应该是走B
然后C tracert 114.114.114.114 应该是走A


wg syncconf wg0 custom.conf

失败,看看是不是要双接口
ip addr add 192.168.10.159/24 dev eth1
还是不要这样临时指定了,需要在/etc/sysconfig/network-scripts 添加配置文件ifcfg-eth1
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=no
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=no
IPV6_DEFROUTE=no
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth1
DEVICE=eth1
ONBOOT=yes
IPADDR=192.168.10.159
PREFIX=24
IPV6_PRIVACY=no

然后重启网络服务使配置生效systemctl restart NetworkManager.service
再看ip route就有正常的路由表了

然后添加打标

wg set wg0 fwmark 2

ip rule add to 45.249.112.0/22 priority 1024


################################始终不行,然后网上搜索了教程,有用wg-quick up wg0快速启动的
首先配置好配置文件/etc/wireguard/wg0.conf
[Interface]
PrivateKey = MIWUc1ptjwoJqH1b/gij7tbNhA8bDLwy1vqMs4A/UlQ=
ListenPort = 51820
address=192.168.2.1/32   #注意 wg-quick这个是必填的,而用wg syncconf wg0 wg0.conf这个命令的话这个就不能填 真坑

[Peer]
PublicKey = 8bsgsg0hOPFGOIwMzTb5oVTb37YKA0aE+adImV06ajY=
Endpoint = 192.168.11.160:51820
AllowedIPs = 192.168.2.2/32,0.0.0.0/1,128.0.0.0/1

然后启动接口
wg-quick up wg0
输出下面的信息
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 192.168.2.1/32 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] ip -4 route add 192.168.2.2/32 dev wg0
[#] ip -4 route add 128.0.0.0/1 dev wg0
[#] ip -4 route add 0.0.0.0/1 dev wg0



下面是网上找到的内容

wg set wg0 fwmark 51820
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820 priority 32765
[#] ip -4 rule add table main suppress_prefixlength 0 priority 32764




#我有点理解了,现在自己手动添加试试   priority 1 这个是手动指定优先级的,无特殊情况不要用这个
ip rule add from all fwmark 0x2 lookup 51820
ip rule add table main suppress_prefixlength 0

ip rule add from all fwmark 0x2 lookup 51820 priority 32765

###############
FwMark = 0xca6c  #这个就是十进制的51820 这个参数的意思就是给所有经过wg0的数据包打标



############结论:
卧槽
我TM裂开 貌似wg根本就不能配合ipset
TMD我打标以后从eth0出去就是正常的 从wg0出去就ping不通
是不是打标的地方不对啊,是不是要打标OUTPUT 实测不行  打标nat的PREROUTING也不行
看来打标mangle确实没问题

最后试试allowedips只添加对端的IP,不行,这个之前就测试过了

终于明白了,wg的过程

正常的配置就不讲了,讲讲allowedips 这个是允许通过的ip 仅仅只是配置允许通过,但是如果真的要路由的话还需要路由表指定

通过下面5个命令添加的wg配置,是没有添加allowedips的路由表的
ip link add dev wg0 type wireguard
ip address add dev wg0 192.168.2.1/32
ip address add dev wg0 192.168.2.1 peer 192.168.2.2   
wg setconf wg0 custom.conf
ip link set up dev wg0
上面的5条命令仅仅只保证wg的链路能通,但是想访问对方的网络还需要手动添加路由表


打标用路由表分流的方式在5楼最下面



回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2023-6-10 19:45 | 显示全部楼层
这一层描述实际需求的配置
以AB节点举例
A是家里的路由器没有公网IP
B是腾讯云服务器,有公网IP
我的目的很简单,家里的电脑访问微软走腾讯云服务器,访问国内的走家里的路由器(访问谷歌这个不在这里讲,也不要用这个去访问谷歌,很快会被封的)

A的配置如下
ip link add dev wg0 type wireguard
ip address add dev wg0 192.168.2.1/32
ip address add dev wg0 192.168.2.1 peer 192.168.2.2   
cd /etc/wireguard/
wg genkey | tee privatekey | wg pubkey > publickey

vi custom.conf  #这里需要新建配置文件

[Interface]
PrivateKey = MIWUc1ptjwoJqH1b/gij7tbNhA8bDLwy1vqMs4A/UlQ=  #私钥填自己的
ListenPort = 51820

[Peer]
PublicKey = 8bsgsg0hOPFGOIwMzTb5oVTb37YKA0aE+adImV06ajY=  #公钥填对方的
Endpoint = 1.2.3.4:51820        #这里的IP填对方的公网IP,比如用的阿里云要填公网IP
AllowedIPs = 192.168.2.2/32,0.0.0.0/1,128.0.0.0/1                #这个表示发往这个地址的数据包走wireguard

wg setconf wg0 custom.conf
ip link set up dev wg0

B的配置如下
ip link add dev wg0 type wireguard
ip address add dev wg0 192.168.2.2/32
ip address add dev wg0 192.168.2.2 peer 192.168.2.1
cd /etc/wireguard/
wg genkey | tee privatekey | wg pubkey > publickey  #这个命令直接生成了公钥和私钥

vi custom.conf  #这里需要新建配置文件

[Interface]
PrivateKey = IA2r48tVzUT8Z6bOvdv9VRW4QlrWPZKnSjJx6sBeDWk=
ListenPort = 51820

[Peer]
PublicKey = ffqjR7FR8Ki0nwXWPgw/Q83Wb4TluIH//VRyZNxongA=
AllowedIPs = 192.168.2.1/32

wg setconf wg0 custom.conf
ip link set up dev wg0

这样AB就建立好了wg的通道了

然后开始配置分流
我的电脑网关指向的A
只需要在A上面配置路由表就行
首先添加一条main的默认路由
ip route add 0.0.0.0/1 via 192.168.2.2 dev wg0 metric 5  
ip route add 128.0.0.0/1 via 192.168.2.2 dev wg0 metric 5 #这2条就是先让全部所有的流量都走wg

然后国内的需要比上面的优先级还高
ip rule add from all lookup 1 priority 1  #保证这条语句在最前面
然后在table 1里面添加国内的路由表,全部走家里路由器的WAN口出去
ip route add 1.2.0.0/16 via 192.168.11.3 dev eth0 table 1
          貌似国内的网段一共有8000多条
          这里的路由表就需要添加8000多条
这样就可以了

简单解释一下:
路由过程就是A收到数据包以后先查询table 1
如果目标地址是国内的,有匹配,就直接转发了
如果目标地址不是国内的,table 1里面没有匹配到,则顺延到main,main里面配置了所有流量走wg,则这个数据包就走了wg


##########################################
A还有另外一种配置方法
先直接编辑配置文件
cd /etc/wireguard/
wg genkey | tee privatekey | wg pubkey > publickey

vi wg0.conf  #这里需要新建配置文件

[Interface]
PrivateKey = MIWUc1ptjwoJqH1b/gij7tbNhA8bDLwy1vqMs4A/UlQ=  #私钥填自己的
ListenPort = 51820
address=192.168.2.1/32 #注意这里是和上面有区别的地方

[Peer]
PublicKey = 8bsgsg0hOPFGOIwMzTb5oVTb37YKA0aE+adImV06ajY=  #公钥填对方的
Endpoint = 1.2.3.4:51820        #这里的IP填对方的公网IP,比如用的阿里云要填公网IP
AllowedIPs = 192.168.2.2/32,[这里填所有你想通过wg走的ip地址段]

然后直接一个命令 wg-quick up wg0
就好了
软件会自动帮你添加好路由表

其实这个配置方式就是windows客户端的默认方式




#################################################另外一种分流方式
这种wg的配置文件,好像还有另外一种分流方式:
首先建立一个ipset 里面放所有国内的网段
ipset create GUONEI hash:net
然后iptables打fwmark
iptables -t mangle -I PREROUTING 1 -i eth1 -m set --match-set GUONEI dst -j MARK --set-mark 0x2
然后添加路由,打了mark的走家里路由器
ip route add 0.0.0.0/0 via 192.168.11.3 dev eth0 table 101
ip rule add from all fwmark 0x2 lookup 101
剩下的全部走wg
ip route add 0.0.0.0/1 via 192.168.2.2 dev wg0 metric 5
ip route add 128.0.0.0/1 via 192.168.2.2 dev wg0 metric 5

刚刚测试了一下,这样也能达到效果
推荐还是用这种设置比较好

这个打标的方式我后来又准备弄一下结果死活不成功
我一怒之下直接添加了7000条路由表
  1. ip rule add from all lookup 100

  2. while read line
  3. do
  4.         ip route add $line via 192.168.1.1 dev eth1 metric 10 table 100
  5. done < cn.txt
复制代码
实测效果也一样,现在的CPU性能都很好,7000多条路由表完全不影响性能

ip rule add from [这里可以填具体的IP地址,可以只给指定的客户端匹配路由表] lookup 100

回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2023-6-10 20:06 | 显示全部楼层
再讲一个 家里和公司内网 能互相访问的配置方式,一般公司都没有公网IP,这里用腾讯云当作中转
A是家里自己用的的电脑 内网网段192.168.1.0/24 wg的address用192.168.200.1/32
B是公司里面自己的电脑 内网网段192.168.2.0/24 wg的address用192.168.200.2/32
C是腾讯云 公网IP是1.2.3.4  wg的address用192.168.200.3/32

环境就是这样了,你在公司甚至都不用通知IT管理员,只要你自己工作的那台电脑能装wireguard软件,并且能联网就行

A的配置文件如下:
[Interface]
PrivateKey = MIWUc1ptjwoJqH1b/gij7tbNhA8bDLwy1vqMs4A/UlQ=
ListenPort = 51820
address=192.168.200.1/32

[Peer]
PublicKey = 8bsgsg0hOPFGOIwMzTb5oVTb37YKA0aE+adImV06ajY= #这个是C的公钥
Endpoint = 1.2.3.4:51820
AllowedIPs = 192.168.200.3/32,192.168.2.0/24

然后直接一个命令 wg-quick up wg0
就好了


B的配置文件如下:
[Interface]
PrivateKey = IA2r48tVzUT8Z6bOvdv9VRW4QlrWPZKnSjJx6sBeDWk=
ListenPort = 51820
address=192.168.200.2/32

[Peer]
PublicKey = 8bsgsg0hOPFGOIwMzTb5oVTb37YKA0aE+adImV06ajY= #这个是C的公钥
Endpoint = 1.2.3.4:51820
AllowedIPs = 192.168.200.3/32,192.168.1.0/24

然后直接一个命令 wg-quick up wg0
就好了


C的配置文件如下:
[Interface]
PrivateKey = MIWUc1ptjwoJqH1b/gij7tbNhA8bDLwy1vqMs4A/UlQ=
ListenPort = 51820
address=192.168.200.3/32

[Peer]
PublicKey = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= #这个是A的公钥
AllowedIPs = 192.168.200.1/32,192.168.1.0/24

[Peer]
PublicKey = BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB= #这个是B的公钥
AllowedIPs = 192.168.200.2/32,192.168.2.0/24

没看错,C不需要配置endpoint
然后直接一个命令 wg-quick up wg0
防火墙要放行51820/UDP
就好了

这样就可以了
这样在家里可以直接ping通公司内网
在公司也能直接ping通家里的内网

本配置文件里面的公钥私钥都需要自己生成 这里的几个我随便抄的,不保证一定匹配

回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2023-6-10 20:08 | 显示全部楼层
再补充一个,你在上班路上,用手机装wg,然后可以同时访问家里和公司的配置
手机的配置文件如下:
[Interface]
PrivateKey = DDDDDDDDDDDSSSSSSSSSSSSSSSSS=
ListenPort = 51820
address=192.168.200.4/32

[Peer]
PublicKey = 8bsgsg0hOPFGOIwMzTb5oVTb37YKA0aE+adImV06ajY= #这个是C的公钥
Endpoint = 1.2.3.4:51820
AllowedIPs = 192.168.200.3/32,192.168.1.0/24,192.168.2.0/24

然后启用,就好了

C需要增加一个peer
[Peer]
PublicKey = DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD= #这个是D的公钥
AllowedIPs = 192.168.200.4/32


回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2023-6-11 14:26 | 显示全部楼层
原来最新的rockylinux9.2 已经内置了wireguard
只需要安装
yum install wireguard-tools
然后就可以管理了


在rockylinux9.2下面用docker安装wireguard只需要创建一个docker容器用
docker run -dit --name wireguard_11 \
-v /root/docker/wireguard/config:/etc/wireguard \
-e TZ=Asia/Shanghai \
-p 51820:51820/udp \
-v /lib/modules:/lib/modules \
--cap-add=NET_ADMIN \
--network docker_bridge_192_168_21 --ip 192.168.21.11 \
--restart unless-stopped \
rockylinux:9.2 bash

然后安装
yum install wireguard-tools iproute iptables
最后按照正常流程走应该就可以了,我后续就没弄了,因为其实都9.2了,直接在host上装wg就行了,更省心
回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2023-6-11 15:21 | 显示全部楼层
https://www.procustodibus.com/bl ... owedips-calculator/

这个工具是计算allowedips的
比如你不想允许某个IP段,用这个计算就可以很方便的计算出允许的段
回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2023-6-11 15:23 | 显示全部楼层
https://zhuanlan.zhihu.com/p/348445351
WireGuard 教程:使用 DNS-SD 进行 NAT-to-NAT 穿透

这个就是上面我提到的A家里B公司C腾讯云的情况
利用C可以让A和B直接连接 后续的流量就都不需要经过C了
回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2024-3-19 00:03 | 显示全部楼层
补充一个docker的
https://github.com/wg-easy/wg-easy

另外建议观看油管司波图的教程 非常详细


https://www.procustodibus.com/bl ... owedips-calculator/
这个网站可以计算wg的allowedips
一般来说默认的0.0.0.0/1,128.0.0.0/1是走所有流量,但是连wg服务器的ip都包含了,会导致访问wg服务器不行了
那么计算的时候
允许填
0.0.0.0/1,128.0.0.0/1
不允许填
服务器的IP

点计算
就会自动给出结果了

回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2024-8-13 01:11 | 显示全部楼层
手动指定MTU
默认的MTU不同的系统不一样 我刚刚发现在rockylinux8.10下面 默认的MTU竟然是6万多

在[interface]下面增加
MTU = 1420


补充一些:
如果用其他方式转发了wg的流量
则这里的MTU好像需要设置为1500
否则会有能上google但是不能上github的症状

回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2024-8-13 01:16 | 显示全部楼层
添加路由表到指定的table

在[interface]下面增加
TABLE = 12345

效果就是用wg-quick up wg0这个命令的时候,添加的路由表会自动添加到12345这个table
配合ip rule add from all lookup 12345 prio 12345
可以实现不修改默认路由表的情况下实现自己想要的路由效果
回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2025-1-8 13:35 | 显示全部楼层
今天用一个云服务器厂商的windows server2016系统当wg服务器的时候
遇到一个问题
配置什么的都没问题
客户端连接好以后ping也能ping通
但是客户端全局通过wg上网的时候就是不行

最后我能想到的结论就是:
云服务器厂商的防火墙设置了禁止V P N之类的
估计是不想惹上问题

或者可能是windows当server我配置错了 算了,反正暂时用不到,这个先搁置
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

荣耀之链

GMT+8, 2025-6-18 03:33 , Processed in 0.019208 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表