無法設置 WireGuard VPN
我的目標是創建一個 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
,WGwireguard-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