guest@blog.cmj.tw: ~/posts $

WireGuard


the VPN solution

因為想要連線到 NAT 內的 server,除了 reversed proxy 之外還想設定 VPN 當作是大內網環境。 連線的順序預期 1) 連線到對外的 server X、2) 只能存取對內的 server Y 內網環境、3) 存取 server X 內部服務只能透過 VPN 環境

WireGuard Server

接下來指令快速建立一個 VPN server:使用的目錄結構是建立一個 wg0 的 VPN 環境、wg0/artifact 內存放個別的 privatekey 與 publickey,其中建立 key 的方式為 wg genkey | tee privatekey | wg pubkey > publickey

.
├── wg0
│   ├── artifact
│   │   ├── peer01
│   │   │   ├── privatekey
│   │   │   └── publickey
│   │   └── server
│   │       ├── privatekey
│   │       ├── psk
│   │       └── publickey
│   └── peer01.conf
└── wg0.conf

期中 wg0.conf 是主要的設定檔,用來描述 server 端的設定跟個別 client (peer) 的資訊

[Interface]
Address         = 10.0.0.0/16
ListenPort      = PORT
PrivateKey      = SERVER_PRIVATE_KEY

# client A
[Peer]
PublicKey       = CLIENT_PUBLIC_KEY
PresharedKey    = PRE_SHARE_KEY
AllowedIPs      = 10.0.1.1/32

而 client 端也是跟 server 類似的設定檔,只是設定的內容相反。之後可以用指令產生相對應的 qrcode qrencode -t ansiutf8 < peer01.conf

[Interface]
Address         = 10.0.1.1/32
PrivateKey      = CLIENT_PRIVATE_KEY
DNS             = 8.8.8.8

[Peer]
PublicKey       = SERVER_PUBLIC_KEY
PresharedKey    = PRE_SHARE_KEY
Endpoint        = SERVER:PORT
AllowedIPs      = 0.0.0.0/0

之後可以用 systemctl start wg-quick@wg0.service 啟用 VPN。唯一需要注意的部分是:當新增、移除 peer 的時候需要在 server 端重新啟動。