顯示具有 wg 標籤的文章。 顯示所有文章
顯示具有 wg 標籤的文章。 顯示所有文章

2025年6月29日 星期日

在 Ubuntu 架設 WireGuard Server

在 Ubuntu 架設 WireGuard Server

這東西有一點點像 SSH 伺服器端需要兩組公鑰與私鑰互相配對,彼此握手成功才能連接。



前置任務

1. 必要安裝的套件

sudo apt install wireguard iptables 

這個 resolvconf 視情況安裝,跑WG後有跳錯再說


2. 打開 IPv4 與 IPv6 的轉發

sudo sed -i 's/^#\s*\(net\.ipv4\.ip_forward\s*=\s*1\)/\1/' /etc/sysctl.conf
sudo sed -i 's/^#\s*\(net\.ipv6\.conf\.all\.forwarding\s*=\s*1\)/\1/' /etc/sysctl.conf

看一下有沒有打開

sudo sysctl -p

預期應該要看到以下的結果

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1


3. 再來需要你在路由器中設置虛擬伺服器把這台的 51820 開放 UDP 出去外面,這個依據路由器不同設置方法不同,這裡在自行 google 做法



WireGuard 私鑰

這裡需要生成兩組私鑰來互相配對,一組當作 Sever 的一組當作 Client 端的


1. 生成私鑰

生成 wg0 與 client0 這兩組,結果保存在 /etc/wireguard/keys 裡面

# 創建資料夾
sudo mkdir -p /etc/wireguard/keys
# 伺服器端
sudo wg genkey | sudo tee /etc/wireguard/keys/wg0.key | wg pubkey | sudo tee /etc/wireguard/keys/wg0.pub >/dev/null
# 客戶端
sudo wg genkey | sudo tee /etc/wireguard/keys/client0.key | wg pubkey | sudo tee /etc/wireguard/keys/client0.pub >/dev/null

保存在keys資料夾中的私鑰不是必要的只是方便之後可以來這裡查


2. 檢視私鑰

再來檢視產生的金鑰與當前IP

# 檢視金鑰
echo "🔑 WirGard wg0 Key:"
echo "  Private Key: $(sudo cat /etc/wireguard/keys/wg0.key)"
echo "  Public  Key: $(sudo cat /etc/wireguard/keys/wg0.pub)"
echo "🔑 WirGard client0 Key:"
echo "  Private Key: $(sudo cat /etc/wireguard/keys/client0.key)"
echo "  Public  Key: $(sudo cat /etc/wireguard/keys/client0.pub)"

# 檢視當前的網卡
echo "🌐 Default Network:"
echo "    Interface: $(ip route | awk '/default/ {print $5}')"
echo "    IPv4:$(curl -4 -s ifconfig.me)"

出網的網卡自己看一下是否正確,如果預設網卡不是你出網的網卡的話。



WireGuard 設定檔案

伺服器端與客戶端個別需要一個設定檔案


1. 生成伺服端設定檔

使用下面的命令建立 wg0.conf 檔案

sudo nano /etc/wireguard/wg0.conf

檔案內容

[Interface]
Address = 10.6.0.1/24
Address = fd86:ea04:1115::1/64
SaveConfig = true
PostUp = iptables -A FORWARD -i %i -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o ${:網卡名稱} -j MASQUERADE
PostUp = ip6tables -A FORWARD -i %i -j ACCEPT
PostUp = ip6tables -t nat -A POSTROUTING -o ${:網卡名稱} -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o ${:網卡名稱} -j MASQUERADE
PostDown = ip6tables -D FORWARD -i %i -j ACCEPT
PostDown = ip6tables -t nat -D POSTROUTING -o ${:網卡名稱} -j MASQUERADE
ListenPort = 51820
PrivateKey = ${:/etc/wireguard/keys/wg0.key}

[Peer]
PublicKey = ${:/etc/wireguard/keys/client0.pub}
AllowedIPs = 10.6.0.2/32, fd86:ea04:1115::2/128

要改的地方已經用 ${:} 標記起來了,照著修改即可

如果有要跑 casaos 的話 [Interface] 裡面多插一條 MTU = 1500 不然會導致凱薩跑不起來



2. 生成客戶端設定檔

使用下面的命令建立檔案 (這個不需要放在etc中這是要給客戶端用的)

nano ~/client0.conf

檔案內容

[Interface]
PrivateKey = ${:/etc/wireguard/keys/client0.key}
Address = 10.6.0.2/32, fd86:ea04:1115::2/128
DNS = 8.8.8.8, 2001:4860:4860::8888

[Peer]
PublicKey = ${:/etc/wireguard/keys/wg0.pub}
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = ${:IPv4}:51820
PersistentKeepalive = 25

要改的地方已經用 ${:} 標記起來了,照著修改即可



啟動 WireGuard 伺服器

再來就可以啟動伺服器了

sudo wg-quick up wg0

然後再把 client0.conf 複製外網機器中,試著連接看看有出現交握就表示成功了,可以從下面的網址測試IP有無成功跳轉

What Is My IP Address - See Your Public Address - IPv4 & IPv6

如果有交握但是無法上網,檢查一下 wg0.conf 中網卡名稱是不是有打錯


另外在預設狀態下 wg0 如果重新啟動前是啟動狀態,重啟之後也會是啟動狀態,但如果是關閉重啟就依然會是關閉

想要不管怎樣都會自動開啟可以打開下面的服務,確保開機自動啟動服務

sudo systemctl enable wg-quick@wg0





其他指令

啟動後要修改 wg0.conf 可以用這個

sudo wg-quick down wg0 && sudo nano /etc/wireguard/wg0.conf && sudo wg-quick up wg0


測試防火牆中的 51820埠 是否有被打通

sudo tcpdump -n -i any udp port 51820


從 pwsh 測試遠端 udp埠

function Send-UdpPacket {
    param (
        [string]$TargetIP,
        [int]$TargetPort,
        [string]$Message = "Hello"
    )
    $udpClient = New-Object System.Net.Sockets.UdpClient
    $remoteEP = New-Object System.Net.IPEndPoint ([System.Net.IPAddress]::Parse($TargetIP), $TargetPort)
    $bytes = [System.Text.Encoding]::UTF8.GetBytes($Message)
    $udpClient.Send($bytes, $bytes.Length, $remoteEP) | Out-Null
    $udpClient.Close()
} Send-UdpPacket -TargetIP "x.x.x.x" -TargetPort 51820




2025年6月21日 星期六

在 Ubuntu 架設 WireGuard Client 用戶端跳轉IP

在 Ubuntu 架設 WireGuard Client 用戶端跳轉IP

這是接續的文章最終實現的在瀏覽器上僅特定網址跳轉IP
  1. 在 Ubuntu 架設 WireGuard Client 用戶端跳轉IP
  2. 在 Ubuntu 用 dante 架設 sock5 代理 讓瀏覽器在特定網址跳轉IP
  3. 使用 SwitchyOmega 跳轉特定網址 IP

下面正文開始



主要是為了做本地的跳轉用代理伺服器,選擇用 WireGuard 速度更佳。到時候我要丟到樹莓派上面跑的。

如果要用wsl測試記得要用 wsl2 版的,在 wsl1 中沒有 WireGuard 要的內核,跑不起來的。安裝 wsl2 要注意如果本機有裝夜神或VMware會影響到




安裝套件

sudo apt-get update
sudo apt install wireguard resolvconf -y

套件 resolvconf 是DNS相關的這個不裝連接會報錯


安裝設定檔

這邊自己把設定檔準備好複製進去,範例中 AX4200_wgs_client 這是我的設定檔名稱,記得改成自己的名字

然後執行下面的命令複製到正確的位置去,並設置權限

sudo cp AX4200_wgs_client.conf /etc/wireguard/wg1.conf
sudo chmod 600 /etc/wireguard/wg1.conf

這裡的 wg1.conf 最終會變成虛擬網卡的名稱,想改的話趁這時候換個名字


連線

然後就可以直接連上了

sudo wg-quick up wg1

連好之後可以確定一下狀態

sudo wg

要重新連接可以用這樣

sudo wg-quick down wg1 && sudo wg-quick up wg1 && sudo wg


測試對外IP

測試連線用 CURL 打出去看一下 IP

echo -e "🌐 外部 IPv4:\033[1;33m$(curl -4 -s ifconfig.me)\033[0m"


開機自動連結

最後測試好了可以設定成開機自動連接

sudo systemctl enable wg-quick@wg1

這樣開機的時候就會自動連上了