什麼是迎國慶的正確方式?

2019-09-20

當然是搭梯子啦! 😆

連工信部都通知了人民做好準備:

2019 年国家网络安全宣传周是 9 月 16 日 至 22 日。 没有网络安全就没有国家安全,就没有经济社会的稳定运行,广大人民群众利益也难以得到保障。 网络安全为人民,网络安全靠人民,积极参与网络安全发展,提升网络安全意识,共筑网络安全防线。

根據今年互聯網維護日的觀察,shadowsocks 好似掛掉的機率更大,於是 V2ray 成爲主流? 不管怎樣,多個渠道就多個看世界的機會。再說自己也想挑戰下 V2ray + CDN 的搭建。

準備材料:

配置 Caddy

此次搭建的思路是建立一個網站,讓 V2ray 去訪問該網站再訪問到被封鎖了的網站。這個策略聽說能降低流量特徵被發現的機率?額……那麼先建立網站吧。

在 Cloudflare 上,將 IP 指向將要訪問網站的域名,這裡要注意,需要先將 DNS 的雲圖標點成灰色。這個過程可能要等待一段時間才能生效。之後 SSH 登錄到服務器進行配置。

爲什麼要選擇 Caddy 來建站而不用 Nginx 或 Apache 呢?後兩者我不懂啊,其實 Caddy 我是現搭現學。不過有一點是,Apache 和 Nginx 需要另行配置 HTTPS,而 Caddy 是默認啓用,可以省了一些功夫。運行下面腳本就能安裝了


curl https://getcaddy.com | bash -s personal

後面需要執行 Caddyfile 文件,此時先創建它


mkdir /etc/caddy
vim /etc/caddy/Caddyfile

寫入下面內容,注意!example.com/var/www/caddy 需要根據實際情況進行修改。


example.com { 
gzip
root /var/www/caddy
tls ai@example.com
log ./access.log
proxy /ray localhost:12345 {  # 端口可以改爲妳喜歡的,但需要和 V2ray 伺服器中的 localhost 的端口一致
    websocket
    header_upstream -Origin
    }
}

再修改下權限


chown -R root:root /etc/caddy
chmod 644 /etc/caddy/Caddyfile

之後運行 caddy 會自動創建證書,爲了安全起見,這裡需要修改存放證書的文件夾的權限


mkdir /etc/ssl/caddy
chown -R root:www-data /etc/ssl/caddy
chmod 770 /etc/ssl/caddy

在 Caddyfile 配置文件中,root /var/www/caddy 是表示網站根目錄,這裡簡單地寫一個 html 頁面供後面顯示用。


mkdir -p /var/www/caddy
vim /var/www/caddy/index.html

網頁內容任意就可以


<html>
    <head>
        <title>Hello World</title>
    </head>
    <body>
        <h1>Hello World</h1>
        Hello World
    </body>
</html>

同樣地,修改權限


chown www-data:www-data /var/www/caddy
chmod 555 /var/www/caddy

到這步,網站就超級簡陋地搭建好了

配置 V2ray

首先將時區調整好,如果沒有這一步,後面的配置好也是無法連接的。V2ray 官方提供了安裝腳本,下載安裝後再進行配置。


cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
bash <(curl -L -s https://install.direct/go.sh)

配置直接貼代碼,註釋部分根據個人情況修改。首先是伺服器端


{
    "log" : {
      "access": "/var/log/v2ray/access.log",
      "error": "/var/log/v2ray/error.log",
      "loglevel": "warning"
    },
    "inbound": {
      "port": 12345, // 端口可以改爲妳喜歡的,但需要和 Caddyfile 中的 localhost 的端口一致
      "listen": "127.0.0.1",
      "protocol": "vmess",
      "settings": {
        "clients": [
          {
            "id": "0b3a1d7f-be72-8c03-3a37-0e85c85d931a", // id 改爲妳自己的
            "level": 1,
            "alterId": 233
          }
        ]
      },
     "streamSettings":{
        "network": "ws",
        "wsSettings": {
             "path": "/ray"
        }
     }
    },
    "outbound": {
      "protocol": "freedom",
      "settings": {}
    },
    "outboundDetour": [
      {
        "protocol": "blackhole",
        "settings": {},
        "tag": "blocked"
      }
    ],
    "routing": {
      "strategy": "rules",
      "settings": {
        "rules": [
          {
            "type": "field",
            "ip": [
              "0.0.0.0/8",
              "10.0.0.0/8",
              "100.64.0.0/10",
              "127.0.0.0/8",
              "169.254.0.0/16",
              "172.16.0.0/12",
              "192.0.0.0/24",
              "192.0.2.0/24",
              "192.168.0.0/16",
              "198.18.0.0/15",
              "198.51.100.0/24",
              "203.0.113.0/24",
              "::1/128",
              "fc00::/7",
              "fe80::/10"
            ],
            "outboundTag": "blocked"
          }
        ]
      }
    }
}

接着是客戶端配置


{
    "log": {
      "loglevel": "warning"
    },
    "inbound": {
      "port": 1080,
      "listen": "127.0.0.1",
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": false
      }
    },
    "inboundDetour": [
      {
          "port": 8123, // 端口可以改爲妳喜歡的
          "listen": "127.0.0.1",
          "protocol": "http",
          "settings": {}
      }
    ],
    "outbound": {
      "protocol": "vmess",
      "settings": {
        "vnext": [{
          "address": "example.com", // 填入妳的域名
          "port": 443,
          "users": [{ 
              "id": "0b3a1d7f-be72-8c03-3a37-0e85c85d931a", // 要與伺服器的 id 一致
              "level": 1,
              "alterId": 233,
              "security": "aes-128-gcm"
          }]
        }]
      },
      "streamSettings":{
          "network": "ws",
          "security": "tls",
          "tlsSettings": {
              "serverName": "example.com" // 填入妳的域名
          },
          "wsSettings": {
              "path": "/ray"
          }
      },
      "mux": {
        "enabled": true,
        "concurrency": 8
    },
      "tag": "forgin"
    },
    "outboundDetour": [
      {
          "protocol": "freedom",
          "settings": {},
          "tag": "direct"
      }
    ],
    "routing": {
      "strategy": "rules",
      "settings": {
          "domainStrategy": "IPIfNonMatch",
          "rules": [
              {
                  "type": "chinaip",
                  "outboundTag": "direct"
              },
              {
                  "type": "chinasites",
                  "outboundTag": "direct"
              },
              {
                  "type": "field",
                  "ip": [
                      "0.0.0.0/8",
                      "10.0.0.0/8",
                      "100.64.0.0/10",
                      "127.0.0.0/8",
                      "169.254.0.0/16",
                      "172.16.0.0/12",
                      "192.0.0.0/24",
                      "192.0.2.0/24",
                      "192.168.0.0/16",
                      "198.18.0.0/15",
                      "198.51.100.0/24",
                      "203.0.113.0/24",
                      "::1/128",
                      "fc00::/7",
                      "fe80::/10"
                  ],
                  "outboundTag": "direct"
              }
          ]
      }
    },
    "policy": {
      "levels": {
        "0": {"uplinkOnly": 0}
      }
    }
}

配置都完成後,啓動 v2ray,並後臺運行 caddy。沒有報錯的話,那麼將能突破封鎖🎉。


nohup caddy -agree -conf /etc/caddy/Caddyfile &
systemctl start v2ray.service

套上 CDN

無論是直連到 VPS 或者訪問網站,都與 shadowsocks 的訪問方式無異,做不到降低被監聽的機會,也不是這次配置的最終目的。之前通過 Cloudflare 進行域名解析就是爲了使用它強大的 CDN 服務,套上 CDN 開啓中轉。

  1. 將先前 DNS 雲圖標點亮(變橙色)
  2. 在 SSL 那裡,SSL 選項改爲 Full

參考資料