wireguard vpn 搭建过程记录

wireguard vpn

实测 nat内的设备会影响到整体的数据转发,太罗嗦了,还不如n2n好使。

基于公钥私钥来实现,可以理解为 ssh 密钥登陆组成的vpn,好理解。

1. 安装wireguard

新版本5.6以上内核自带了,不用多余考虑
直接install即可

2. 配置服务端

服务端只是有公网而已,配置上需要加一条路由转发。不适合打洞 p2p。

他需要中间节点组流量的转发,所以看中间节点的带宽能力

需要注意的点

  • 默认端口51820
  • 自定义端口范围

2.1. 生成密钥

公钥私钥都得用。私钥留自己上,公钥是对端的。

genkey 生成私钥
pubkey 生成公钥

umask 007
wg genkey >server.key
cat server.key
root@C20240617226357:~# cat server.key
sGgJgpF5PtnMcjf4P4EDI6NneUtadfgUHj6sUQLFZVQ=
root@C20240617226357:~# wg pubkey <server.key >publicserver
root@C20240617226357:~# cat publicserver
3VZkORC05ApYqSUmzxZ6Wpf+P2LWj/rye3OsyYH+8wg=

2.2. 配置wg-quick

没人用命令行配置,都是用配置文件

root@C20240617226357:~# vim /etc/wireguard/wg0.conf
root@C20240617226357:~# cat /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.1.1/24
ListenPort = 57362
PrivateKey = sGgJgpF5PtnMcjf4P4EDI6NneUtadfgUHj6sUQLFZVQ=

[Peer]
PublicKey = /T6T4soNPXyd4mmp2k22+1CnE/X5DKzFvKc9UT7eb3g=
AllowedIPs = 10.0.1.2/24

ListenPort端口不指定每次都是随机的,所以最好指定一下。开防火墙。

2.3. 放行防火墙

添加udp的放行端口

root@C20240617226357:~# ufw allow 57362/udp
Rule added
Rule added (v6)

3. 配置客户端

ivo@debian:~$ wg genkey >clientcloud
ivo@debian:~$ wg pubkey <clientcloud >publickey
ivo@debian:~$ cat publickey
/T6T4soNPXyd4mmp2k22+1CnE/X5DKzFvKc9UT7eb3g=
ivo@debian:~$ cat clientcloud
cJrv8lK1cim9Q8dj9hDR5uOXXzZNnsJlb/tT4DEaqXU=

3.1. 配置 wg-quick

ivo@debian:~$ sudo vim /etc/wireguard/wg0.conf
ivo@debian:~$ sudo cat /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.1.2/24
ListenPort = 57362
PrivateKey = cJrv8lK1cim9Q8dj9hDR5uOXXzZNnsJlb/tT4DEaqXU=

[Peer]
PublicKey = 3VZkORC05ApYqSUmzxZ6Wpf+P2LWj/rye3OsyYH+8wg=
AllowedIPs = 10.0.1.1/24
Endpoint = 198.222.222.222:57362
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

参数解释
在WireGuard配置文件中,[Peer] 部分用于定义与另一个WireGuard节点的连接参数。下面是对您提供的参数的详细解释:

  • PublicKey: 这是您想要与之建立连接的WireGuard节点的公钥。在这个例子中,<A的公钥> 表示了您正在从B或C的视角配置,以连接到公网主机A。您需要将<A的公钥>替换为A的实际公钥字符串。

  • Endpoint: 这是公网主机A的IP地址和端口号,用于内网主机B或C知道如何通过网络找到A。198.222.222.222:57362 是A的公网IP地址和WireGuard监听的端口(默认是51820,但可以根据需要更改)。这个参数对于内网主机来说是必需的,因为它们需要通过NAT或路由才能访问公网。对于公网主机A来说,通常不需要设置Endpoint,因为它直接监听在公网上。

  • AllowedIPs: 这个参数定义了从该连接中接受哪些IP地址的流量。在这个例子中,0.0.0.0/0 表示接受来自任何IP地址的流量。这通常在内网主机上设置,以便它们可以通过WireGuard连接访问整个互联网(当然,这取决于您的网络设置和防火墙规则)。然而,在这个特定的场景中,由于B和C只是希望与A以及彼此之间通信,使用0.0.0.0/0可能不是最安全的做法。更安全的做法是将AllowedIPs设置为它们实际需要的网络范围,例如10.0.0.0/24(如果您的内部网络是这个范围)。但是,请注意,由于B和C需要通过A进行通信,它们仍然需要能够接收来自A的转发流量,这通常意味着A的AllowedIPs应该包括B和C的IP地址。

  • PersistentKeepalive: 这个参数定义了每隔多少秒发送一个keepalive消息以维持连接。这有助于NAT和防火墙保持连接状态打开,尤其是在连接可能由于长时间没有活动而被关闭的环境中。25秒是一个常见的值,但您可以根据网络环境和需求进行调整。

需要注意的是,对于公网主机A来说,它的[Peer]配置应该不包括Endpoint,并且其AllowedIPs应该包括内网主机B和C的IP地址(以及任何其他它希望通过WireGuard网络访问的IP地址)。同时,内网主机B和C的AllowedIPs设置应该根据它们的具体需求进行调整,以限制不必要的流量。

另外,虽然0.0.0.0/0在内网主机上可以作为测试使用,但在生产环境中,为了安全起见,应该限制AllowedIPs的范围。

4. 启动wg-quick

这里有2个命令
wg-quick up wg0 #启动虚拟网卡

wg-quick down wg0 #关闭虚拟网卡

然后也可以用systemd 开机启动

systemctl enable wg-quick@wg0

5. gpt给出的配置,参考用

为了配置WireGuard以实现一个公网主机(A)与两个内网主机(B和C)之间的互通,我们需要遵循以下步骤。这包括在每个主机上生成密钥对、配置WireGuard接口,并确保网络路由正确设置。

5.1. 第一步:生成密钥对

在每个主机(A, B, C)上,你需要安装WireGuard并生成密钥对。这里假设你已经有了WireGuard的二进制文件或者已经通过包管理器安装了它。

# 在所有主机上执行
sudo wg genkey | sudo tee /etc/wireguard/privatekey | sudo chmod 600 /etc/wireguard/privatekey
sudo wg pubkey < /etc/wireguard/privatekey | sudo tee /etc/wireguard/publickey

5.2. 第二步:配置WireGuard接口

5.2.1. 公网主机A的配置

假设公网主机A的公网IP是x.x.x.x,内部IP分配为10.0.0.1/24

# /etc/wireguard/wg0.conf
[Interface]
PrivateKey = <A的私钥>
Address = 10.0.0.1/24
ListenPort = 51820

[Peer]
PublicKey = <B的公钥>
AllowedIPs = 10.0.0.2/32

[Peer]
PublicKey = <C的公钥>
AllowedIPs = 10.0.0.3/32

5.2.2. 内网主机B的配置

假设内网主机B的内部IP为10.0.0.2/24,并配置为通过NAT或路由连接到公网。

# /etc/wireguard/wg0.conf
[Interface]
PrivateKey = <B的私钥>
Address = 10.0.0.2/24
ListenPort = 51820

[Peer]
PublicKey = <A的公钥>
Endpoint = x.x.x.x:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

5.2.3. 内网主机C的配置

假设内网主机C的内部IP为10.0.0.3/24,配置类似于B。

# /etc/wireguard/wg0.conf
[Interface]
PrivateKey = <C的私钥>
Address = 10.0.0.3/24
ListenPort = 51820

[Peer]
PublicKey = <A的公钥>
Endpoint = x.x.x.x:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

5.3. 第三步:启动WireGuard并验证连接

在每个主机上,启动WireGuard服务并检查状态。

sudo systemctl start wg-quick@wg0
sudo systemctl enable wg-quick@wg0
sudo wg

5.4. 第四步:确保路由和防火墙设置

确保公网主机A的防火墙允许UDP端口51820的入站和出站流量。对于内网主机B和C,确保NAT或路由设置正确,以便它们可以访问公网。

5.5. 第五步:测试连通性

从每个主机上,使用ping命令测试到其他主机的连通性。

ping 10.0.0.1  # 从B或C到A
ping 10.0.0.2  # 从A或C到B
ping 10.0.0.3  # 从A或B到C

5.6. 注意事项

  • 确保所有主机的防火墙和网络策略允许WireGuard的流量。
  • 如果内网主机不能直接访问公网,请确保有适当的NAT设置或VPN服务器(如OpenVPN或SoftEther)在公网主机上运行,并配置内网主机通过该服务器连接到WireGuard。
  • 根据实际情况调整AllowedIPs,特别是在多子网或复杂网络环境中。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇