Ubuntu

無法設置 WireGuard VPN

  • June 27, 2021

我的目標是創建一個 VPN

  1. 客戶端具有靜態 IP 地址。
  2. 客戶端能夠相互通信和伺服器,
  3. 客戶端可以通過 VPN 訪問全球網際網路。
  4. 另外,我想設置 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實用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 客戶端的訪問。

目前,我的配置如下。

伺服器

[Interface]
Address = 10.0.0.1/32
ListenPort = 5555
PrivateKey = ___some_private_key___

# The following is needed only if you have `ufw` installed
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = ___some_public_key___
AllowedIPs = 10.0.0.1/32

客戶

[Interface]
PrivateKey = ___some_private_key___
ListenPort = 5555
Address = 10.0.0.1/32

[Peer]
PublicKey = ___some_public_key___
AllowedIPs = 10.0.0.0/24
Endpoint = ___some_ip_address__:5555

引用自:https://serverfault.com/questions/1006595