我們將會:
我們首先要利用SSH連上伺服器終端,請先閱讀{利用SSH和私密金鑰連結伺服器}。再來我們可以在伺服器本機配置WireGuard或是利用Docker配置WireGuard。如果怕麻煩就使用Docker,詳見{使用Docker建立WireGuard伺服器}。如果想要自己動手操作,就參照{建立WireGuard VPN伺服器}。接著不論你使用Docker或是本機配置,都要開啟Oracle伺服器對外port。
sudo apt update
sudo apt install wireguard -y
wg genkey | tee privatekey | wg pubkey > publickey
cat privatekey
cat publickey
sudo -i
cd /etc/wireguard/
umask 077; wg genkey | tee privatekey | wg pubkey > publickey
cat privatekey
cat publickey
ip link show
ens3
nano /etc/wireguard/wg0.conf
編輯伺服器設定檔如下。請注意將「伺服器privatekey」和「用戶端publickey」換成剛剛分別在3.和2.記下的內容。[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = 伺服器privatekey
SaveConfig = false
PostUp = /etc/wireguard/helper/add-nat-routing.sh
PostDown = /etc/wireguard/helper/remove-nat-routing.sh
[Peer]
PublicKey = 用戶端publickey
AllowedIPs = 10.8.0.2/32
Ctrl+x
,y
,Enter
儲存並離開編輯器。nano
編輯檔案。mkdir -v /etc/wireguard/helper/
nano /etc/wireguard/helper/add-nat-routing.sh
ens3
換成它的名字)#!/bin/bash
IPT="/sbin/iptables"
IPT6="/sbin/ip6tables"
IN_FACE="ens3" # NIC connected to the internet
WG_FACE="wg0" # WG NIC
SUB_NET="10.8.0.0/24" # WG IPv4 sub/net aka CIDR
WG_PORT="51820" # WG udp port
SUB_NET_6="fd42:42:42:42::/112" # WG IPv6 sub/net
## IPv4 ##
$IPT -t nat -I POSTROUTING 1 -s $SUB_NET -o $IN_FACE -j MASQUERADE
$IPT -I INPUT 1 -i $WG_FACE -j ACCEPT
$IPT -I FORWARD 1 -i $IN_FACE -o $WG_FACE -j ACCEPT
$IPT -I FORWARD 1 -i $WG_FACE -o $IN_FACE -j ACCEPT
$IPT -I INPUT 1 -i $IN_FACE -p udp --dport $WG_PORT -j ACCEPT
remove-nat-routing.sh
,在檔案裡貼上以下內容並儲存離開。nano /etc/wireguard/helper/remove-nat-routing.sh
remove-nat-routing.sh
內容:#!/bin/bash
IPT="/sbin/iptables"
IPT6="/sbin/ip6tables"
IN_FACE="ens3" # NIC connected to the internet
WG_FACE="wg0" # WG NIC
SUB_NET="10.8.0.0/24" # WG IPv4 sub/net aka CIDR
WG_PORT="51820" # WG udp port
SUB_NET_6="fd42:42:42:42::/112" # WG IPv6 sub/net
# IPv4 rules #
$IPT -t nat -D POSTROUTING -s $SUB_NET -o $IN_FACE -j MASQUERADE
$IPT -D INPUT -i $WG_FACE -j ACCEPT
$IPT -D FORWARD -i $IN_FACE -o $WG_FACE -j ACCEPT
$IPT -D FORWARD -i $WG_FACE -o $IN_FACE -j ACCEPT
$IPT -D INPUT -i $IN_FACE -p udp --dport $WG_PORT -j ACCEPT
nano /etc/sysctl.d/10-wireguard.conf
並編輯如下:net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
sysctl -p /etc/sysctl.d/10-wireguard.conf
chmod -v +x /etc/wireguard/helper/*.sh
systemctl enable wg-quick@wg0.service
systemctl start wg-quick@wg0.service
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
service docker status
Active: active (running)
表示沒問題,按下Ctrl+C
跳出sudo usermod -aG docker ubuntu
newgrp docker
id ubuntu
docker run -d \
--name=wireguard \
--cap-add=NET_ADMIN \
--cap-add=SYS_MODULE \
-e PUID=1001 \
-e PGID=1001 \
-e TZ=Asia/Taipei \
-e SERVERURL=伺服器ip位置 \
-e PEERS=1 \
-e PEERDNS=8.8.8.8,8.8.4.4 \
-e INTERNAL_SUBNET=10.8.0.0/24 \
-e ALLOWEDIPS=0.0.0.0/0 \
-e LOG_CONFS=true \
-p 51820:51820/udp \
-v /home/ubuntu/wireguard/config:/config \
--sysctl="net.ipv4.conf.all.src_valid_mark=1" \
--restart unless-stopped \
lscr.io/linuxserver/wireguard:latest
PUID
為上一步中的uid
,PGID
為上一步中的gid
伺服器ip位置
換成剛剛記下的ipcat /home/ubuntu/wireguard/config/peer1/peer1.conf
7. 在客戶端(自己的電腦)新增一個檔案
wg0.conf
,將上一步回傳的內容複製進去,保存。
vcn-xxxxx-
-> subnet-xxx-x
-> Default security...
新增傳入規則
,並如圖片輸入:
新增傳入規則
儲存規則本節介紹如何使用WireSock或是它的一個GUI版本:TunnlTo來連線WireGuard伺服器。相較於一般的WireGuard用戶端,透過WireSock能夠以程序名稱來實現分割通道,這樣就可以很簡單的應用在遊戲上。
wg0.conf
,並編輯為以下內容(請將用戶端privatekey
、伺服器publickey
、伺服器ip位置
變更為剛剛記下的內容):[Interface]
PrivateKey = 用戶端privatekey
Address = 10.8.0.2/24
DNS = 8.8.8.8, 8.8.4.4
[Peer]
PublicKey = 伺服器publickey
AllowedIPs = 0.0.0.0/0
Endpoint = 伺服器ip位置:51820
PersistentKeepalive = 15
AllowedApps = firefox.exe
YOUR_PATH
換成剛剛建立的wg0.conf
的路徑!wiresock-client.exe run -config "C:\YOUR_PATH\wg0.conf" -log-level info
如果不喜歡指令介面,可以考慮使用TunnlTo的圖形介面。(這個軟體還在開發中,可能會遇到一些bug,本文撰寫時為v0.1.4版)
Add Tunnel
,填入需要的內容,並按Save
儲存:
用戶端privatekey
、伺服器publickey
、伺服器ip位置
變更為剛剛記下的內容!Enable
並打開Firefox測試看看是否連線成功!AllowedApps = ffxivlauncher.exe, ffxiv_dx11.exe
WireSock 有一些一般的Wireguard VPN client沒有的功能。可以編輯.conf檔或是在TunnlTo裡面輸入來設定。以下翻譯 https://www.wiresock.net/ 的內容:
請確認你的MobaXterm是最新版本。某些舊版本的OpenSSH加密有些問題。
sudo apt update
?請確認你的Oracle雲端傳出規則(到 https://cloud.oracle.com/networking/vcns ,點選vcn-xxxxx-
-> subnet-xxx-x
-> Default security...
->傳出規則)有設定規則,如圖中設定。
這可能有很多原因。如:DNS設定錯誤、金鑰輸入錯誤、伺服器位置錯誤等等。請確認每個步驟的檔案都有編輯正確。使用TunnlTo也許會遇到不可預期的問題,如果遇到困難建議使用WireSock指令界面。