前言
公司目前的 DrayTek 路由器型號 不支援 WireGuard。我改在一台 Debian VM 上自建 WireGuard,帶來幾個好處:
- 效能不再受限於 DrayTek 硬體:VM 可自行調整資源(CPU/RAM/網卡),加密吞吐量更彈性。
- 路由規則更好控:只把特定內網(例:
192.168.0.0/24、192.168.10.0/24)走 VPN,不用額外在客戶端打一堆指令。 - 維持個人上網體驗:一般上網不走公司出口,避免外部網站看到公司 IP,也不讓自己網速被公司端拖慢。
- 相容性佳:Windows/macOS/Linux/手機端都容易配置。
目標:外部 Win11 透過 WireGuard 連入公司,能存取 192.168.0.0/24 與 192.168.10.0/24(DrayTek 兩個 VLAN 可互通)。
做法:Layer-3 路由 + NAT;實際出口介面為 ens18;
0) 伺服器環境
- Debian 12
- KDE Plasma
設置 GUI 方便同事操作,會影響到網路連線的管理指令。
1) 拓樸與參數
-
WG 伺服器(Debian VM)
- 介面:
ens18 - LAN IP:
192.168.0.70/24 - Gateway:
192.168.0.251(DrayTek) - WG 隧道 IP:
10.10.0.1/24
- 介面:
- Win11 用戶端:
10.10.0.2/32 - DrayTek:需 Port Forward UDP 51820 → 192.168.0.70:51820;VLAN 0/10 可路由。
1.5) 路由器/連接埠轉發(DrayTek 或你的實際路由器)
你的路由器必須把從網際網路進來的 WireGuard UDP 流量轉發到 Debian WG 伺服器。
以 DrayTek 為例(如果你用別款路由器,請做等效設定):
- 類型: Port Forward / NAT
- 協定: UDP
- 外部連接埠:
51820 - 內部主機(伺服器):
192.168.0.70 - 內部連接埠:
51820 - 備註: WireGuard
- 若有 WAN 防火牆 規則,請同時允許 UDP/51820。
使用其他廠牌/型號?
請做等效的動作:
- 建立一條 UDP 51820 的埠轉發,從 WAN 指向 WG 伺服器的 LAN IP(
192.168.0.70)。 - 若路由器有獨立的防火牆頁面,新增一條允許 UDP/51820 的入站規則。
- 若處於 雙重 NAT(ISP 數據機 + 你的路由器),需在兩層都設定轉發,或把上游設備改成 橋接/DMZ 模式。
- 若 ISP 使用 CGNAT (日本常見),通常無法做入站轉發—請改用公共 IP、VPS 中繼,或請能接收入站連線的一端當 WG 伺服器。
可選(純路由、不做 NAT):
若你在 Debian 伺服器上移除 NAT,請在路由器新增靜態路由:
目的:10.10.0.0/24→ 下一跳:192.168.0.70。
2) NetworkManager:建立 ens18(一次完成)
nmcli connection add type ethernet ifname ens18 con-name ens18 \
ipv4.addresses 192.168.0.70/24 ipv4.gateway 192.168.0.251 \
ipv4.dns "1.1.1.1 8.8.8.8" ipv4.method manual \
ipv6.method ignore autoconnect yes
nmcli connection up ens18
# 驗證
ip addr show ens18
ip route get 192.168.0.251 # 應為 dev ens18 src 192.168.0.70
你已刪除 br0;不需要 bridge。
3) 伺服器安裝與金鑰
apt update && apt install -y wireguard iptables tcpdump
( umask 077; wg genkey | tee /etc/wireguard/server.key | wg pubkey > /etc/wireguard/server.pub )
( umask 077; wg genpsk > /etc/wireguard/psk ) # 可選(建議)
chmod 600 /etc/wireguard/server.key /etc/wireguard/psk
4) /etc/wireguard/wg0.conf(NAT 出口 = ens18)
[Interface]
Address = 10.10.0.1/24
ListenPort = 51820
PrivateKey = <server.key>
# 將 10.10.0.0/24 經 ens18 做 NAT
PostUp = iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o ens18 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -s 10.10.0.0/24 -o ens18 -j MASQUERADE
# 第一台用戶端
[Peer]
PublicKey = <client1.pub>
PresharedKey = <psk> # 若有
AllowedIPs = 10.10.0.2/32
5) IP 轉送與 rp_filter
cat >/etc/sysctl.d/99-wg.conf <<'EOF'
net.ipv4.ip_forward=1
# 避免回路徑檢查丟棄 wg0→ens18 的轉送封包
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.wg0.rp_filter=0
net.ipv4.conf.ens18.rp_filter=0
EOF
sysctl --system
6) 防火牆(若有)
iptables -A INPUT -p udp --dport 51820 -j ACCEPT
iptables -A FORWARD -i wg0 -o ens18 -j ACCEPT
iptables -A FORWARD -i ens18 -o wg0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
7) 啟動與開機自動
wg-quick up wg0
systemctl enable wg-quick@wg0
wg show
8) Win11 用戶端 client.conf
[Interface]
PrivateKey = <client.key>
Address = 10.10.0.2/32
DNS = 192.168.0.251
[Peer]
PublicKey = <server.pub>
PresharedKey = <psk> # 若伺服器啟用 PSK
Endpoint = <你的公網IP或DDNS>:51820
AllowedIPs = 10.10.0.1/32, 192.168.0.0/24, 192.168.10.0/24
PersistentKeepalive = 25
若用戶端所在網路也是 192.168.0.0/24,可先改為精確主機
/32(例如只加目標 IP),或暫用0.0.0.0/0驗證。
9) 驗證
Win11:
ping 10.10.0.1
ping 192.168.0.70
ping 192.168.0.251
ping 192.168.0.203
ping 192.168.10.20
伺服器(同時):
iptables -t nat -v -n -L POSTROUTING # 應見 -o ens18 的 MASQUERADE 計數 > 0
wg show # 該 peer 的 rx/tx 會跳動
tcpdump -ni wg0 icmp
tcpdump -ni ens18 host 192.168.0.203 and icmp
ip route get 192.168.0.203 # 應為 dev ens18 src 192.168.0.70
10) 常見問題速解
- 只能 ping
10.10.0.1/192.168.0.70→ 檢查:
ip_forward=1、rp_filter=0、iptables -t nat是否有
-A POSTROUTING -s 10.10.0.0/24 -o ens18 -j MASQUERADE。 - Win11 沒有 192.168.0.0/24 路由 →
AllowedIPs未包含或本地段衝突。先用/32或0.0.0.0/0驗證。 - 需要連 VLAN10 → 用戶端
AllowedIPs加192.168.10.0/24即可(DrayTek 會在 VLAN 間路由)。 - 想改純路由(不 NAT) → 在 DrayTek 加:目的
10.10.0.0/24→ 下一跳192.168.0.70,並移除 wg0 的 NAT。