自從 Disney+ 在北美開通那一秒開始,我就一直研究如何在台灣也能舒舒服服看 Disney+?
原本想使用 Surge for macOS 直接在電腦上搭一個代理伺服器
這樣可以讓局域網內所有上網設備都能無縫爽看 Disney+
其中包含 iPhone、iPad、桌上電腦還有我最主要觀賞影片的 Apple TV
Surge 配起來是輕鬆無腦愉快,但是該軟體需要 24 小時在一台蘋果電腦上面執行
而且他會接管電腦上所有流量,每次切換線路或者 reload 的時候,某些 app 就會被強制斷線
造成執行的電腦會在日常使用中造成不怎麼舒服的體驗 🤔
於是開始找另外 Linux 的解決方案,因為我局域網內剛好有一台 Mini PC 在跑 AdGuard Home 跟其他網路應用
諮詢過陳老師以後,給了我幾個網址跟幾個關鍵字「Clash 旁路由」,我 Google 一下以後瞬間豁然開朗!
原來除了貴鬆鬆的 Surge 以外還有這種翻牆神器!稍微爬一下文,自己踩一點雷之後也就這麼順手搭建起來了
就稍微簡單記錄一下搭建過程~
以下是我這次安裝的環境與內部網路 IP,請根據你的網路環境進行變更
上網的主網關:192.168.88.1
安裝 Clash 的主機:192.168.88.200
主機跑的是 Debian 系統,也可以是 Ubuntu、樹莓派 Raspbian 或者其他相容系統
2019/12/12 update
更新文章:使用 fake-ip 模式躲避 DNS 檢查所在地區
下載安裝 Clash
Clash 是用 Go 語言寫的開放原始碼軟體,已經有各種平台編譯好的執行檔
直接到官網根據自己 CPU 平台來下載: https://github.com/Dreamacro/clash
我的是 Intel 的 Mini PC 跑 Debian 系統,所以下載 clash-linux-amd64 的版本
首先 ssh 進去要安裝的主機內,依照下面步驟開始操作
# 下載
$ wget https://github.com/Dreamacro/clash/releases/download/v0.16.0/clash-linux-amd64-v0.16.0.gz
# 解壓縮
$ gzip -d clash-linux-amd64-v0.16.0.gz
# 搬到指定目錄並給予執行與綁定端口的權限
$ sudo mv clash-linux-amd64-v0.16.0 /usr/bin/clash
$ sudo chmod +x /usr/bin/clash
$ sudo setcap cap_net_bind_service=+ep /usr/bin/clash
設定 Clash
上面步驟把 Clash 執行檔準備好,接下來我們要開始準備設定的內容
# 建立 Clash 設定檔的目錄
$ mkdir -p ~/.config/clash
$ cd ~/.config/clash
# 下載 dashboard 網頁 GUI
$ wget https://github.com/haishanh/yacd/archive/gh-pages.zip
# 解縮壓
$ unzip gh-pages.zip
# 變更目錄名稱為 dashboard
$ mv yacd-gh-pages/ dashboard/
# 建立一個 Clash 設定檔,名稱必須為 config.yaml
$ nano config.yaml
接著請直接複製以下內容:
port: 7890
socks-port: 7891
redir-port: 7892
allow-lan: true
mode: Rule
log-level: info
external-controller: 0.0.0.0:9090
# 如果你是架在外部網路,下面可以自行加密碼會比較安全
secret: ""
external-ui: dashboard
dns:
enable: true
ipv6: false
listen: 0.0.0.0:53
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- '1.1.1.1'
- '1.0.0.1'
# 下面 Proxy 內容請自行根據你的伺服器來填寫
Proxy:
- name: "USA1"
type: ss
server: ????????
port: ????
cipher: ????????
password: "??????"
plugin: ????
plugin-opts:
mode: ???
- name: "USA2"
type: ss
server: ????????
port: ????
cipher: ????????
password: "??????"
plugin: ????
plugin-opts:
mode: ???
Proxy Group:
- name: Proxy
type: select
proxies:
- USA1
- USA2
Rule:
# For Disney+
- DOMAIN,cdn.registerdisney.go.com,Proxy
- DOMAIN-KEYWORD,dssott.com,Proxy
- DOMAIN-SUFFIX,edge.bamgrid.com,Proxy
- DOMAIN-SUFFIX,www.disneyplus.com,Proxy
- DOMAIN-SUFFIX,dssott-cds.s.llnwi.net,Proxy
- DOMAIN-SUFFIX,alphacdn.net,Proxy
- DOMAIN-SUFFIX,dss.map.fastly.net,Proxy
# 不符合上面 Disney+ 會用到的域名,將全部直連
- MATCH,DIRECT
以上都填寫好以後記得保存
設定開機自動啓動
接下來設定一個開機自動啓動 Clash 的 Service
$ sudo nano /etc/systemd/system/clash.service
複製貼上以下內容:
[Unit]
Description=clash daemon
[Service]
Type=simple
User=username
ExecStart=/usr/bin/clash -d /home/username/.config/clash/
Restart=on-failure
[Install]
WantedBy=multi-user.target
注意上面有兩處「username」,請替換成自己的使用者帳號
同樣要記得存檔退出
# 下次重新開機會自動啓動 Clash
$ sudo systemctl enable clash.service
設定轉發與路由
$ sudo nano /etc/sysctl.conf
找到檔案內的「net.ipv4.ip_forward=1」,把這行最前面的「#」去掉
# 讓剛剛的修改生效
$ sudo sysctl -p
接著要建立對應的 iptables
$ nano iptables.sh
複製貼上以下內容:
#!/bin/bash
iptables -t nat -N clash
iptables -t nat -N clash_dns
iptables -t nat -A PREROUTING -p tcp --dport 53 -d 198.19.0.0/24 -j clash_dns
iptables -t nat -A PREROUTING -p udp --dport 53 -d 198.19.0.0/24 -j clash_dns
iptables -t nat -A PREROUTING -p tcp -j clash
iptables -t nat -A clash_dns -p udp --dport 53 -d 198.19.0.0/24 -j DNAT --to-destination 192.168.88.200:53
iptables -t nat -A clash_dns -p tcp --dport 53 -d 198.19.0.0/24 -j DNAT --to-destination 192.168.88.200:53
iptables -t nat -A clash -d 0.0.0.0/8 -j RETURN
iptables -t nat -A clash -d 10.0.0.0/8 -j RETURN
iptables -t nat -A clash -d 127.0.0.0/8 -j RETURN
iptables -t nat -A clash -d 169.254.0.0/16 -j RETURN
iptables -t nat -A clash -d 172.16.0.0/12 -j RETURN
iptables -t nat -A clash -d 192.168.0.0/16 -j RETURN
iptables -t nat -A clash -d 224.0.0.0/4 -j RETURN
iptables -t nat -A clash -d 240.0.0.0/4 -j RETURN
iptables -t nat -A clash -p tcp -j REDIRECT --to-ports 7892
同樣記得保存後退出
# 給予執行權限
$ sudo chmod +x iptables.sh
# 執行剛剛的 iptables.sh
$ sudo ./iptables.sh
# 接著直接啓動 Clash
$ sudo systemctl start clash.service
至此,如果都沒做錯的話,一個遇到 Disney+ 域名就翻牆的 Clash 旁路由就已經跑起來了
然後也可以在電腦的瀏覽器上打開安裝 Clash 伺服器 IP 網址,隨時切換翻牆線路
http://192.168.88.200:9090/ui
而且只有遇到 Disney+ 流量才會翻牆,並不會影響其他網站或者 App 所有上網的速度
如果測試都沒問題的話,需要另外安裝一個軟體,這樣重開機以後我們設定的 iptables 才不會消失
$ sudo apt install iptables-persistent
Client 設定
接下來我們要在需要翻牆的上網設備上面設定 Gateway 與 DNS
原本是 DHCP 自動獲取的話,就改成手動,IP 與 DNS 兩項都要改
改完之後直接打開 Disney+ App 就會發現原先無法登入的情況已經消失~
在 Apple TV 上面也是同樣的,到系統設定裡面找到網路,改成手動之後就能爽看啦!
如果在使用過程有遇到什麼問題,可以隨時在 Telegram 找到我,先這樣~我要來去追曼達洛人了~ 😍