申請

原本上網都是利用Cloudflare提供的Warp+/Zero Trust稍微保護一下,
但是由於某些網站限制地區內容觀看,Warp只是隱藏IP,地區還是無解。
試著用了幾個VPN服務,影音播放還是被擋,只好自己弄一個。

Oracle很早以前就提供了Cloud Free Tier,有AMD跟ARM機器。
AMD的是VM.Standard.E2.1.Micro: 免費兩臺各1CPU & 1GB Ram;
ARM的是VM.Standard.A1.Flex: 最多 4CPU & 24GB Ram。

弄好AMD機器後,發現速度感人 amd-speed

只好選擇ARM機器。

ARM

創建ARM,選VM.Standard.A1.Flex
arm

最多可選到4核&24GB Ram

Wireguard

機器跑起來後,登入系統,我選的是ubuntu 22.04。

安裝

sudo apt update
sudo apt install wireguard

產生密鑰

sudo -i
cd /etc/wireguard/
wg genkey | tee server.key | wg pubkey > server.pub    # 產生server密鑰
wg genkey | tee client1.key | wg pubkey > client1.pub  # 產生client1密鑰
wg genkey | tee client2.key | wg pubkey > client2.pub  # 產生client2密鑰

設定伺服器

編輯/etc/wireguard/wg0.conf

[Interface]
Address = 172.16.0.1/24  # 記得選一個不同於現有的網段
SaveConfig = false
ListenPort = 123456      # 自定Port
PrivateKey = server.key  # server私鑰
PostUp = /etc/wireguard/add-nat-routing.sh
PostDown = /etc/wireguard/remove-nat-routing.sh

[Peer]
PublicKey = client1.pub  # Client1 公鑰
AllowedIPs = 172.16.0.2/32

[Peer]
PublicKey = client2.pub  # Client2 公鑰
AllowedIPS = 172.16.0.3/32

新增兩個檔案add-nat-routing.sh和remove-nat-routing.sh

# add-nat-routing.sh
#!/bin/bash
IPT="/sbin/iptables"
#IPT6="/sbin/ip6tables"          # 沒用到IPV6可以關掉

IN_FACE="ens3"                   # 記得更改成系統中網卡
WG_FACE="wg0"                    # WG NIC
SUB_NET="172.16.0.0/24"          # WG IPv4 sub/net aka CIDR
WG_PORT="123456"                 # WG 自定port
#SUB_NET_6=":::/64"              # 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

## IPv6 (Uncomment) ##
#$IPT6 -t nat -I POSTROUTING 1 -s $SUB_NET_6 -o $IN_FACE -j MASQUERADE
#$IPT6 -I INPUT 1 -i $WG_FACE -j ACCEPT
#$IPT6 -I FORWARD 1 -i $IN_FACE -o $WG_FACE -j ACCEPT
#$IPT6 -I FORWARD 1 -i $WG_FACE -o $IN_FACE -j ACCEPT
# 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="172.16.0.0/24"          # WG IPv4 sub/net aka CIDR
WG_PORT="123456"                 # WG 自定port
#SUB_NET_6="::::/64"             # 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

# IPv6 rules (uncomment) #
#$IPT6 -t nat -D POSTROUTING -s $SUB_NET_6 -o $IN_FACE -j MASQUERADE
#$IPT6 -D INPUT -i $WG_FACE -j ACCEPT
#$IPT6 -D FORWARD -i $IN_FACE -o $WG_FACE -j ACCEPT
#$IPT6 -D FORWARD -i $WG_FACE -o $IN_FACE -j ACCEPT

更改/etc/sysctl.conf

net.ipv4.ip_forward=1

權限設好後,測試

sysctl -p
wg-quick up wg0
wg-quick down wg0

順利啟動後,註冊系統服務

systemctl start [email protected]
systemctl enable [email protected]
systemctl status [email protected]

設置防火牆

到Oracle網頁中,Coputer>Instances>Instance details
Primary VNIC裡的subnet>Default Security List 新增規則
開放WiredGuard用到的port,允許連入0.0.0.0/0,Portocol選UDP
firewall

測試連線

arm-speed

客戶端設定檔

[Interface]
Address = 172.16.0.2/32
PrivateKey = client1.key          # client1 私鑰
DNS = 1.1.1.1, 1.0.0.1

[Peer]
AllowedIPs = 0.0.0.0/0
Endpoint = 123.456.789.xxx:123456 # serverip:port
PublicKey = server.pub            # server公鑰

最後重開試一下,應該可以自動啟動服務。

參考

  1. https://hackmd.io/@twMisc/Sko6nYxYo
  2. https://hk-hello-world.medium.com/%E6%96%B0%E4%B8%80%E4%BB%A3vpn-wireguard-d8980fc009ac