Home VPN - WireGuard

前言

在中國以外的地方就不使用V2Ray了,改用Wireguard

參考資料

作法

Docker-compose.yml內容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
services:
wireguard:
image: ghcr.io/linuxserver/wireguard
container_name: wireguard
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Taipei
- SERVERURL=${your_IP_or_Domain}
- SERVERPORT=${Your_port}
- PEERS=${peer1_name},${peer2_name},${peer3_name}
- PEERDNS=8.8.8.8
- INTERNAL_SUBNET=${Subnet_you_want}
- ALLOWEDIPS=${connect_to_where_via_wireguard}
volumes:
- /var/lib/docker/volumes/wireguard/config:/config
- /lib/modules:/lib/modules
ports:
- ${Your_port}:${Your_port}/udp
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
restart: unless-stopped

參數說明

參數定義內容
SERVERURL等於就是定義你的endpoint,你的外部IP或是Domain
SERVERPORT定義要使用的udp port,基本上跟後面ports要mapping的以及你的最外側FW設定要能對的起來
PEERS你要用的peers,可以直接用名字命名然後在docker-compose up的時候會自動生成
PEERDNS在Wireguard環境中你要用的DNS ip
INTERNAL_SUBNET預設的子網路,定義好後Server會用這個子網路的第一個IP,Peers就會依序用後面的
ALLOWEDIPS這是你打算使用wireguard連上的範圍,0.0.0.0/0就是全流量走wireguard,可以定義一個subnet就只有這個subnet走wireguard

使用說明

Android

基本上就是安裝同名子的App然後刷QR code就可以用了,Linuxserver.io的這個image很貼心的會幫你產生只要

docker logs wireguard就會看到各個peers的QR code,把圖片照下來或是存下來甚至是做了放到網頁上都可以(不過這個一個peer只允許一個連線也沒必要這樣)

Linux(Manjaro 21)

有蠻多種方式可以使用的,可以單純用network-manager這個GUI程式直接設定(不過ip的部份因為他不吃DHCP,所以要手動設定)

或是可以用wg-quick的方式,甚至可以先把wg0.conf寫好都確定了在import到network-manager裡面

wg-quick方式

1
sudo pacman -S wireguard-tools

需要先安裝module&tools

然後

1
2
3
4
sudo mkdir /etc/wireguard
sudo chmod 750 /etc/wireguard
cd /etc/wireguard
sudo umask 077

其實在docker的設定檔(default in my docker-compose.yml is /var/lib/docker/volumes/config)內就有已經可以用的設定檔你可以把整個peer_$(Name)抓下來放到/etc/wireguard內把過於複雜的檔名改一下,基本上你用XXX.conf這個XXX就是你的interface_name

確定都好了之後

1
sudo wg-quick up XXX

這樣就會預設去找在/etc/wireguard/內名叫XXX的XXX.conf

確認連線都ok後就好了

不連了就

1
sudo wg-quick down XXX

把設定好的檔案import到Network-manager

1
sudo nmcli connection import type wireguard file /etc/wireguard/${your_conf}

就好了之後就可以滑鼠來操作

注意事項

  • AllowIPs

若是你沒有在外側架設任何服務的話,是可以用0.0.0.0/0,這代表所有的封包都走wireguard從Server那邊出去,但是當你這樣設定的時候架在同個ip上的其他服務就會連不上,所以建議若你的網路上掛了其他服務,還是單純的定義某些區段走wireguard就好

  • 若你不是直接拿server上產生的檔案來用的話,那就要很注意設定的內容務必要正確
1
2
3
4
5
6
7
8
9
10
11
12
#Client設定範例
---------------------------------------------------------------------------------------------------------------------------------
[Interface]
Address = 192.168.2.2 #這裡的ip要跟Server上設定的peer ip要一樣,不然會有問題
PrivateKey = <client's privatekey> #這個private Key,是client的private key,基本上docker會幫你建一個,你若是要自己建務必要去改server端設定
ListenPort = 21841 #這個是你作server的時候port要用哪個
DNS = 8.8.8.8 #這個是你作為Server的時候DNS要用哪台

[Peer]
PublicKey = <server's publickey> #這個是Server端的public key
Endpoint = <server's ip>:51820 #這個就是endpoint跟port
AllowedIPs = 0.0.0.0/0, ::/0 #這個就是定義你哪些要用wireguard連線