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

2025年7月30日 星期三

ASUS 路由器如何建立 TAP模式的 OpenVPN Server

ASUS 路由器如何建立 TAP模式的 OpenVPN Server

這裡好像有坑搞了好一陣子,預設的狀態下建立 TAP 連接會錯誤,先說結論需要做的事情

TAP 的好處是可以等校於你把實際把網線差到路由器上一樣


兩項必要的設定

  • 使用IPv4連接
  • 從 Server 端推送 gateway

使用IPv6連接

預設的情況下 OpenVPN 是支援6的,而華碩的路由器也支援6,但是華碩的 OpenVPN Server 疑似不支援,解法有兩個擇1就可以

  1. 把 OpenVPN 設定檔中的 ddns 域名改成 IPv4,因為如果是 domain.asusddns.com 這個是有包含 IPv6 的,然後 6 會優先於 4 導致出問題了

  2. 第二個能下手的地方是 OpenVPN 會建立一個虛擬網卡,就對那個網卡右鍵內容,把 IPv6 關閉,這樣就沒事了


從 Server 端推送 gateway

我一直吃到一個錯誤是

OpenVPN ROUTE: failed to parse/resolve route for host/network: 192.168.50.1

是了很多辦法最是直接在路由器中有個可以自訂指令的地方推送 gateway

push "route-gateway 192.168.50.1"


設定完成之後會吃到另一個錯誤

ROUTE: route addition failed using service: ʫ¥Ӥw¸g¦s¦b¡C   [status=5010 if_index=17]

但這個不是那麼致命,只是推送重複路由的警告而已,是可以正常使用的,最後就解決了


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月22日 星期日

使用 SwitchyOmega 跳轉特定網址 IP

使用 SwitchyOmega 跳轉特定網址 IP

這是接續的文章最終實現的在瀏覽器上僅特定網址跳轉IP

  1. 在 Ubuntu 架設 WireGuard Client 用戶端跳轉IP
  2. 在 Ubuntu 用 dante 架設 sock5 代理 讓瀏覽器在特定網址跳轉IP
  3. 使用 SwitchyOmega 跳轉特定網址 IP


下面正文開始



這是瀏覽器的一個插件,可以透過 sock5 跳轉特定網址的IP
Proxy SwitchyOmega 3 (ZeroOmega) - Chrome 線上應用程式商店


安裝好之後進入設定頁面,填入你本地的 sock5 代理伺服器



然後儲存設定即可

再來進入你需要跳轉的網頁,右上角點出該插件,點擊加入條件



情境模式選擇 proxy 按下加入



再來重整一下就能跳轉了





如果要測速的話,speetest的流量沒辦法走 sock5 如果要測速可以試試看這個
インターネット回線の速度テスト | Fast.com




在 Ubuntu 用 dante 架設 sock5 代理 讓瀏覽器在特定網址跳轉IP

在 Ubuntu 用 dante 架設 sock5 代理 讓瀏覽器在特定網址跳轉IP

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

2025-06-29
後來發現更好的做法 wiregard+socksproxy 有人整合了可以不用自己組
詳細參考這篇 CHG: 在 Ubuntu 中創建 WireProxy 代理伺服器



下面正文開始




第二篇是代理伺服器,代理再搭配 Chrome 的插件 SwitchyOmega 就可以完成組合技,只在特定網只才跳轉IP



安裝

更新並安裝

sudo apt-get update && sudo apt install dante-server -y

然後我們先備份一下最初的原始設定範例

sudo cp -p /etc/danted.conf /etc/danted.orig.conf



更改設定

再來我們修改設定值

sudo nano /etc/danted.conf

輸入下面的基本範例

logoutput: /var/log/danted.log
internal: 0.0.0.0 port = 1080
external: wg1

method: none
user.notprivileged: nobody

client pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    log: connect disconnect error
}

pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    protocol: tcp udp
    log: connect disconnect error
}

輸入完畢按下 CTRL+S 存檔 CTRL+X 離開



啟動服務

設置好之後就可以啟動服務了

sudo systemctl start danted

如果有修改檔案需要重啟服務可以用以下的方式

sudo systemctl daemon-reload && sudo systemctl restart danted


啟動完畢之後檢查一下服務狀態是否在 runing 狀態

sudo systemctl status danted --no-pager -n 10

然後就可以測試一下 sock 代理是否可用了

curl --socks5 localhost:1080 http://ipinfo.io/ip; echo


最後確認一下經由外部IP的連接

curl --socks5 "$(hostname -I|cut -f1 -d' '):1080" http://ipinfo.io/ip; echo

這裡有成功顯示跳轉的IP就是完成了



設置開機時自動啟動

原則上加入 systemctl 就行了

sudo systemctl enable danted


從其他電腦測試

這邊選用 powershell 指令當範例,能連上就是可以用了

curl.exe --socks5 192.168.3.89:1080 http://ipinfo.io/ip

指令中的 IP: 192.168.3.89 記得改成你自己的機器的 IP

至此就完成摟~






進階:: 自動啟動 danted 時讓他等待 wg1 連接完成

更進階的讓 danted 自動啟動時會先等待 wg1 連線成功才啟動的方式

機器的性能不要太差不用特別設定不會卡到,有問題在設定也行。具體表現的情況就是重啟後 danted 啟動時不到虛擬網卡 wg1 而失敗 


首先編輯一下設定

sudo nano /lib/systemd/system/danted.service

然後找到 After=network.target 把它取代成下面這樣

#After=network.target
After=network.target wg-quick@wg1.service
Requires=wg-quick@wg1.service

這表示自動啟動 danted 時會順帶啟動 wg1 並且等待他完成,自己要記得這裡有改過


然後存檔離開,並重啟服務 (需要先關閉 wg1)

sudo wg-quick down wg1 && sudo systemctl daemon-reload && sudo systemctl restart danted


最後確認一下經由外部IP的連接

curl --socks5 "$(hostname -I|cut -f1 -d' '):1080" http://ipinfo.io/ip; echo

沒問題的話就完成了

重新啟動可以輸入 sudo reboot 重啟一下測試成果



進階2:: 向區網廣播自身的 hostname

由於IP可能會變動,或是不好記住可以多裝一個套件 avahi-daemon 廣播主機名稱

這樣一來下一步設定代理伺服器的時候就不用記住 IP 了,直接設置這台主機名即可


不需要什麼設定,就是安裝並設定開機啟動而已

sudo apt install avahi-daemon -y
sudo systemctl enable avahi-daemon
sudo systemctl start avahi-daemon

再來就可以不用輸入IP而是輸入本機名稱即可,不知道名稱是什麼可以打指令 hostname 即可以查詢




進階3:: 簡易管理批次檔案

自己寫了兩個方便切換的,沒特別考量什麼只是方便能切隨意地的東西而已

2025-06-29 發現有個更好用的 wireproxy 這個直接可以解決自己管理兩個服務的困擾,以及可以避免本機IP不會被跳轉


proxy-disable.sh

#!/bin/bash

set -e

DISABLE_BOOT=0

for arg in "$@"; do
    case "$arg" in
        -b|--disable-boot)
            DISABLE_BOOT=1
            ;;
    esac
done

# 先關掉 danted
sudo systemctl stop danted

if [[ $DISABLE_BOOT -eq 1 ]]; then
    sudo systemctl disable danted
fi

# 如果 wg0 存在,關掉 WireGuard
if ip link show wg0 &>/dev/null; then
    sudo wg-quick down wg0
fi
# 如果 wg1 存在,關掉 WireGuard
if ip link show wg1 &>/dev/null; then
    sudo wg-quick down wg1
fi

# 關閉開機自動啟動
if [[ $DISABLE_BOOT -eq 1 ]]; then
    sudo systemctl disable wg-quick@wg1
fi

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


proxy-enable.sh

#!/bin/bash

set -e

ENABLE_BOOT=0

for arg in "$@"; do
    case "$arg" in
        -b|--enable-boot)
            ENABLE_BOOT=1
            ;;
    esac
done

# 如果 wg0 存在,關掉 WireGuard
ip link show wg0 &>/dev/null && sudo wg-quick down wg0

# 開啟 WireGuard(如果沒開才開)
ip link show wg1 &>/dev/null || sudo wg-quick up wg1
# 重新載入 systemd 並重啟 danted
sudo systemctl daemon-reload
sudo systemctl restart danted

if [[ $ENABLE_BOOT -eq 1 ]]; then
    sudo systemctl enable wg-quick@wg1
    sudo systemctl enable danted
fi

sleep 1

proxy="$(hostname -I | cut -f1 -d' '):1080"
echo -ne "SOCKS5 代理:\033[1;90m$proxy\033[0m → IP:"
echo -ne "\033[38;5;39m"
curl --socks5 "$proxy" -s http://ipinfo.io/ip
echo -e "\033[0m"