本帖最後由 semson 於 2023-11-1 13:18 編輯
講左幾個月話要試一試佢,呢兩日終於有時間落手實驗在OpenWrt上裝XRay Reality Server,結果亦如預期一樣正面。下面筆記給大家參考。
警告: 用自己IP穿墻, 有機會被墻ban。請自行評估風險。
註意: 本POST非step-by-step 教程亦不做科普, 你要有中等OpenWrt或Linux經驗。
前言
主流翻墻工具都要自架一個偽網站,門檻十分高。在router上起server更加高上加高,因為要全手動操作。之前有EPC師兄分享Merlin起V2Ray/XRay server 的教程,相當佩服! 直到XRay Reality 出現,終於有簡單又適合router 安裝的翻墻server 。
安裝流程
基於Linux既 service都係咁上下安裝流程: install binary -> config files -> init script -> open firewall port。同理Merlin 應該都適用。
要求
- Reality 要XRay-core >1.8.0才支援,OpenWrt 22.03及之後的版本能在官方 Feeds 直接下載
- 已設置好DDNS,實測duckdns同dynu可過墻
- Router 剩餘空間: 官方Feeds安裝到overlayfs要13MB(未親測), 手動安裝到ext4要37M空間
- Router RAM >= 128MB, 後面說明原因
- 安裝好xray-core的dependencies: opkg update && opkg install libc ca-bundle
- 確保指定的tcp port已打開,如本POST的443
- 如你跟我一樣裝xray-core到外置儲存, 需用Linux 文件系統如ext4
Install Binary: xray-core, geoip.dat及geosite.dat
22.03及之後的版本可以通過官方Feeds安裝。而我就小試牛刀用了全手動安裝。點解咁複雜? 因為目標router是19.07,官方Feeds沒有xray-core; 同埋我的router ROM不夠大,要手動裝到外置儲存(/dev/sda1)。
首先確認router的arch:- root@OpenWrt:~# grep ARCH /etc/openwrt_release
- DISTRIB_ARCH='mipsel_24kc'
複製代碼 我用緊MT7621 router, 對應既arch 是mipsel_24kc。
下載非官方ipk到/tmp, 因為實測官方的不能在19.07上正確啟動- cd /tmp
- wget [url]https://github.com/yichya/openwrt-xray/releases/download/v1.8.4/openwrt-xray_1.8.4-1_mipsel_24kc.ipk[/url]
- tar zxpvf openwrt-xray_1.8.4-1_mipsel_24kc.ipk #得到data.tar.gz
- tar zxpvf data.tar.gz #得到/usr/bin/xray binary
- mkdir -p /mnt/sda1/opt/xray #建立放置xray binary的目錄
- mv usr/bin/xray /mnt/sda1/opt/xray #將xray放到此目錄
複製代碼 geoip.dat及geosite.dat: 好多地方都可下載。以下示範用xray-core開發者提供的版本。- cd /tmp
- wget [url]https://github.com/XTLS/Xray-core/releases/download/v1.8.4/Xray-linux-mips32le.zip[/url] #下載xray-core開發者編譯的版本
- unzip Xray-linux-mips32le.zip #得到geoip.dat及geosite.dat
- mkdir -p /mnt/sda1/opt/xray/share #建立放置geoip.dat及geosite.dat
- mv geoip.dat geosite.dat /mnt/sda1/opt/xray/share #將geoip.dat及geosite.dat放到此目錄
複製代碼 取得config files及init script。亦可以直接用我下面提供的code。- cd /tmp
- wget [url]https://downloads.openwrt.org/releases/23.05.0/packages/mipsel_24kc/packages/xray-core_1.8.4-1_mipsel_24kc.ipk[/url] #下載官方的ipk
- tar zxpvf xray-core_1.8.4-1_mipsel_24kc.ipk #得到data.tar.gz
- tar zxpvf data.tar.gz #得到/etc目錄
- mv etc/config/xray /etc/config #將官方ipk裡的xray daemon config放到目標OpenWrt系統
- mv etc/init.d/xray /etc/init.d #將官方ipk裡的init script放到目標OpenWrt系統
複製代碼 /etc/config/xray 留意#備註了所有修改的地方- config xray 'enabled'
- option enabled '1' #修改成1=enable
- config xray 'config'
- option confdir '/etc/xray'
- list conffiles '/etc/xray/config.json'
- option datadir '/mnt/sda1/opt/xray/share' #修改成存放geoip.dat及geosite.dat路徑
- option dialer ''
- option format 'json'
複製代碼 /etc/init.d/xray- #!/bin/sh /etc/rc.common
- USE_PROCD=1
- START=99
- CONF="xray"
- PROG="/mnt/sda1/opt/xray/xray" #修改成存放xray binary的路徑
- start_service() {
- config_load "$CONF"
- local enabled
- config_get_bool enabled "enabled" "enabled" "0"
- [ "$enabled" -eq "1" ] || return 1
- local confdir
- local conffiles
- local datadir
- local dialer
- local format
- config_get confdir "config" "confdir"
- config_get conffiles "config" "conffiles"
- config_get datadir "config" "datadir" "/mnt/sda1/opt/xray/share" #修改成存放geoip.dat及geosite.dat路徑
- config_get dialer "config" "dialer"
- config_get format "config" "format" "json"
- procd_open_instance "$CONF"
- procd_set_param command "$PROG" run
- [ -n "$confdir" ] && procd_append_param command -confdir "$confdir"
- [ -n "$conffiles" ] && {
- for i in $conffiles
- do
- procd_append_param command -config "$i"
- done
- }
- [ -n "$format" ] && procd_append_param command -format "$format"
- [ -n "$dialer" ] && procd_set_param env XRAY_BROWSER_DIALER="$dialer"
- procd_set_param env XRAY_LOCATION_ASSET="$datadir"
- procd_set_param file $conffiles
- procd_set_param limits core="unlimited"
- procd_set_param limits nofile="1000000 1000000"
- procd_set_param stdout 1
- procd_set_param stderr 1
- procd_set_param respawn
- procd_close_instance
- }
- reload_service() {
- stop
- start
- }
- service_triggers() {
- procd_add_reload_trigger "$CONF"
- }
複製代碼 /etc/xray/config.json- {
- "log": {
- "loglevel": "none" // 不要在flash memory上開logging
- },
- "routing": {
- "domainStrategy": "IPIfNonMatch",
- "rules": [
- {
- "type": "field",
- "ip": [
- "geoip:cn",
- "geoip:private"
- ],
- "outboundTag": "block"
- }
- ]
- },
- "inbounds": [
- {
- "listen": "0.0.0.0",
- "port": 443, // 擔心tcp/443安全問題可以改用high port,但增加被墻的風險
- "protocol": "vless",
- "settings": {
- "clients": [
- {
- "id": "5551491f-7715-4e24-acb8-0f58aebe0425", // 可用xray uuid指令自己generate
- "flow": "xtls-rprx-vision"
- }
- ],
- "decryption": "none"
- },
- "streamSettings": {
- "network": "tcp",
- "security": "reality",
- "realitySettings": {
- "dest": "hk.trip.com:443", // 最好改用自己找到的偽裝網站
- "serverNames": [
- "trip.com",
- "hk.trip.com"
- ],
- "privateKey": "CHmkBno7OvQDrIn7WXU6SPkebKKiH_AgEA1ClfHdBHw", // 可用xray x25519指令自己generate, 對應的Public key是"JOu2R5Ld0dwJ42wYvewATlQwBVUs7ioWVNkvoySHAl8"
- "shortIds": [
- ""
- ]
- }
- },
- "sniffing": {
- "enabled": true,
- "destOverride": [
- "http",
- "tls",
- "quic"
- ]
- }
- }
- ],
- "outbounds": [
- {
- "protocol": "freedom",
- "tag": "direct"
- },
- {
- "protocol": "blackhole",
- "tag": "block"
- }
- ],
- "policy": {
- "levels": {
- "0": {
- "handshake": 3,
- "connIdle": 180
- }
- }
- }
- }
複製代碼 Client: v2rayN / v2rayNG
請參考此網站:https://cscot.pages.dev/2023/03/02/Xray-REALITY-tutorial/
如遇到問題,可以用logread |grep xray睇log。/etc/xray/config.json 裡指定loglevel可以睇到更多資訊。
Benchmark
簡單測試,mt7621 speedtest最高約38Mbps,此時所有cpu core/thread 都係100%。 RAM用約100MB,佔用大戶係adguard home + banip + xray-core。不專業結論適合3-4個client輕量用,平均每人分到10Mbps。router效能低過mt7621就不用考慮了。 |