我的目标是创建一个 VPN
- 客户端具有静态 IP 地址。
- 客户端能够相互通信和服务器,
- 客户端可以通过 VPN 访问全球互联网。
- 另外,我想设置 DNS 和私有域名(使用 NginX)。
这是服务器的配置:
[Interface]
Address = 10.0.0.1/24
ListenPort = 5555
PrivateKey = xxxxx
[Peer]
PublicKey = xxxxx
AllowedIPs = 0.0.0.0/0
和客户端的配置:
[Interface]
PrivateKey = xxxxx
ListenPort = 5555
Address = 10.0.0.2/32
DNS = 8.8.8.8
[Peer]
PublicKey = xxxxx
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = <server ip>:5555
但是当我尝试加载服务器的配置时wg setconf wg0 /etc/wireguard/wg0.conf
,我收到了这个错误:
Line unrecognized: `Address=10.0.0.1/24'
Configuration parsing error
因此我评论了这一行。但这可能会使 WG 为服务器和客户端选择随机 IP 地址。
为了使 WireGuard 工作,我还运行了以下命令:
ip link add dev wg0 type wireguard
ip address add dev wg0 10.0.0.1/24
ip link set up dev wg0
毕竟,wg
命令提供以下输出:
interface: wg0
public key: xxxxx
private key: (hidden)
listening port: 5555
peer: xxxxx
endpoint: <my IP address>:6228
allowed ips: 0.0.0.0/0
latest handshake: 2 minutes, 11 seconds ago
transfer: 26.02 KiB received, 248 B sent
从客户端(带有 WireGuard GUI 的 MacOS)我可以连接,但是:
- 我没有互联网连接。我什至无法通过全局 IP 地址 ping 服务器,尽管我可以使用私有的,
10.0.0.1
. - 即使我更改客户端配置中的端口,我也能够连接到 VPN。我认为这意味着它并没有真正联系起来。
那么,我怎样才能实现我的目标呢?我的配置有什么问题?
PS。服务器上既iptables
没有安装防火墙,也没有安装防火墙,所以这不是问题。net.ipv4.ip_forward=1
另外,我net.ipv6.conf.all.forwarding=1
在/etc/sysctl.conf
.
软件版本。操作系统是Ubuntu 18.04.4 LTS
,内核:4.15.0-20-generic
,WG wireguard-tools v1.0.20200206
:。
更新
我Address
从服务器的配置中删除,并设置AllowedIPs = 10.0.0.2/24
在客户端的配置中,我终于通过私有 IP 从客户端连接到服务器的 NginX,并且能够访问 Internet(因为流量在 VPN 之外)。
但是如果我AllowedIPs = 0.0.0.0/0
在客户端设置,我无法上网,但仍然可以通过VPN的IP地址10.0.0.1到达服务器。我尝试用 解决它ifconfig wg0 broadcast/multicast
,但没有成功。现在该命令ip address show wg0
提供以下输出:
4: wg0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 10.10.10.1/24 scope global wg0
valid_lft forever preferred_lft forever
inet 10.10.10.1 peer 10.10.10.2/32 scope global wg0
valid_lft forever preferred_lft forever
另外,我无法从另一个客户端访问一个客户端,我认为这是同样的问题。如何修复 WireGuard 配置或服务器网络设置以解决问题?
的手册
wg
没有提到该set
命令可以理解该Address
指令,也没有提到其配置格式规范:相反,要使用包含 的配置文件设置界面
Address
,您应该使用一些名为的帮助程序wg-qucik
:此命令将创建接口
wg0
本身,因此您可能希望使用ip
命令清理已创建的接口。好吧,几天几夜,杀了服务器,我自己解决了所有问题
:)
首先,我想提一下,
wg
实用wg-quick
程序对配置文件的处理方式不同。所以,我wg setconf wg0 /etc/wireguard/wg0.conf
没有按预期的方式工作,我猜它使用旧的配置格式。现在我wg-quick
通过systemctl
.其次,即使我调用
net.ipv4.ip_forward=1
了. 我必须使用命令将配置与内核链接起来。这允许对等点相互通信并通过 VPN 访问 Internet。/etc/sysctl.conf
systemctl daemon-reload ; systemctl restart systemd-networkd
sysctl -p /etc/sysctl.conf
值得一提的是,对于所有
Address
注释,最好使用 32 位子网掩码,这意味着确切的 IP,而不是范围。此外,我使用 BIND9 设置了自定义 DNS 以在网络中创建自己的域。NginX 会检查发件人的 IP 地址,以限制对 VPN 客户端的访问。
目前,我的配置如下。
服务器
客户