自從 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 找到我,先這樣~我要來去追曼達洛人了~ 😍