对主流代理工具的介绍, 以及代理服务器搭建的教学.

科学上网其实很简单, 你无法正常访问外面的网页, 那就让一个proxy server帮你访问, 然后再把访问到的内容回传给你.
因此你仅需要:

  1. 代理服务器: 想办法搞到或制作proxy servers;
  2. 代理工具: 管理、配置你的proxy servers.

proxy-server

如果你有一个代理服务器, 可称其为节点, 如果你有一组代理服务器, 可称其为订阅订阅列表.
获取节点/订阅的方法有很多, 下面3类方法由易到难:

  • ⭐直接找节点贩子或老牌飞机场购买;
  • ⭐⭐从GitHub或YouTube上一些大佬的分享里免费获取;
  • ⭐⭐⭐自己动手搭建, 一般前提是需拥有一台海外VPS.

※购买节点

节点/订阅提供商合集, 来自V2rayN项目的主页介绍.

我买过的便宜供应商:

※※免费节点项目-edgetunnel及其fork

该项目利用CloudFlare的Workers/Pages实现白嫖的代理服务器. 评价褒贬不一, 可以作为备用机场.

来自cmliu的免费节点

( 项目主页; 视频教程 )
作者在项目中已内置了优选IP, 我们只需要在cloud flare中部署作者的项目脚本, 把CF自动生成的域名修改为自定义域, 最后获取到订阅链接, 即可前往代理工具使用其免费节点服务.

部署教程

我这里选用了cloudflarePages的方法来部署, 步骤见这里的1-2. 此时我的节点服务的域名是ray2ray.pages.dev, 订阅链接是https://<hash-value>.ray2ray.pages.dev/<UUID>.

教程进阶1-改用自定义域

该部分为可选操作, 但强烈建议. 目的是把订阅链接中自动生成的域名改为自定义域名. 流程如下:

  1. 获取免费域名: 进入网站→ 点击创建Zone→ Name自定义, 作为三级域; ipv4 address光标放进去, 网站会自动补全一个ip地址; ipv6 address可以空着. 最后我将得到一个三级域名raymond0713.dynv6.net.
  2. 给域名创建一条解析记录record: 进入RecordsAdd Records→ 选择CNAMEName部分自定义一个四级域; Data部分填写我的cloudflare pages域名ray2ray.pages.dev.(根域名的.不要忘了)→ 保存. 此时我得到了一个四级域名ladder.raymond0713.dynv6.net.
  3. 在CF的Pages添加自定义域: 进入相应Pages→ 进入自定义域→ 填入你的四级域名→ 开始CNAME设置→ 直接检查DNS记录→ 完成. 此时这个四级域名就可以访问ray2ray.pages.dev了.
  4. 在代理工具中使用新的订阅链接:https://ladder.raymond0713.dynv6.net/<UUID>
教程进阶2-一些变量的修改

作者cmliu的js脚本中, 有一些变量是可以通过CF-Pages的配置环境变量来修改的, 这样方便CF-Pages的快速部署. 下述环境变量名中, 除了UUID都可缺省.

注: 修改过变量后要重新部署才生效.

  • UUID
    更换UUID, 也许会对降低节点的延迟有帮助.
  • PROXYIP 代理IP/反代IP
    由于我们部署的应用程序无法访问托管在CloudFlare的CDN站点, 因此需要设置其代理节点. 该变量支持多ProxyIP, 用逗号作间隔.
    可用的代理IP有:
    23.162.136.169
    47.254.66.75
    2a01:4f8:c2c:123f:64:5:ac40:6c0a # 用ipv6时要加`[]`
    2a00:1098:2c::5:ac40:6d0a
    proxyip.fxxk.dedyn.io
    cdn.xn--b6gac.eu.org
    cdn-all.xn--b6gac.eu.org
    edgetunnel.anycast.eu.org
    workers.cloudflare.cyou
  • SOCKS5

永久免费HeroKu部署

实践TODO

proxy-tool

资料: 仓库-社区

server-tool

这里介绍一个代理服务器的UI工具:X-ui

v2ray

clash

clash-for-windows

所有订阅url的配置文件都放在C:\Users\ray\.config\clash\profiles.

clash-for-linux

不知道什么原因, clash原作者的仓库被爆破了, 归档网站存下了其2023/10月的仓库快照(≤ v1.18.0).

clash本身不是代理服务器, 而是管理我们的代理服务器(节点)的, 并兼具规则路由流量分流等功能.

使用clash进行代理的前提是, 你已经自建了一些节点, 或者购买了订阅列表.

默认情况下, 它在本机端口127.0.0.1:7890处理所有HTTP/HTPS请求, 然后根据规则转发到节点.

是否需要安装

要知道, 你的机器正常访问外网的本质是, 你有一台代理服务器, 它可以在本机安装, 也可以在你能访问到的其他机器上安装. 因此你可根据实际情况考虑是否需要安装clash.

  • 安装: 一般情况下, 你需要在本机安装运行clash, 来实现用127.0.0.1:7890转发请求.

  • 不必安装: 如果你局域网内某主机A已经安装运行了clash, 且打开了ALLOW LAN设置, 你只需在本机设置环境变量http_proxy=$A_ip:7890即可.

    • 在wsl2中, 由于与 Windows 主机共享网络, A_ip是127.0.0.1;
    • 在docker容器中, A_ip是Docker网络桥接的默认网关, 即172.17.0.1;
    • 在普通的局域网中, 可在主机A里面用ipconfigifconfig查看A_ip.

    ⚠️ 端口只暴露在内网, 可不必关注安全问题.

  • 不必安装: 如果你有一台有公网IP的主机B已经安装运行了clash, 你只需在本机设置环境变量http_proxy=$B_ip:7890即可.

    ⚠️ 端口暴露在公网, 一定要关注安全和滥用问题.

    这里给出两种安全使用的方案:

    1. clash配置用户和密码:
      $HOME/.config/clash/config.yaml中设置授权用户和密码:
              authentication:
      - "user1:pass1"
      - ...
      ```
      这样, 你本地的环境变量需改为`http_proxy=http://user1:pass1@$B_ip:7890`, `https_proxy`同理.

      2. *ssh本地转发隧道*:
      如果你还不放心本机和主机B之间的网络通信的安全性, 那就用ssh的本地转发功能, 把`本机的自定义端口映射到主机B的7890端口`. 仅需在你当前机器上执行两步:

      - `ssh -qCNf -L 7890:127.0.0.1:7890 $公网user@$公网ip -i $path_pri_key`
      - `export http_proxy=http://127.0.0.1:7890`, `export https_proxy=http://127.0.0.1:7890`

      > ⚠️ 注意: 命令中的`127.0.0.1`是公网ip机器里的`127.0.0.1`, 不是本机的`127.0.0.1`. 也正是如此, 你**没必要**去公网ip机器的防火墙上特地放开7890端口.
      > 如果你想让这功能开机自启, 也可将上述命令补充后写进`.zshrc`或`~/.bashrc`.


      下面介绍需要安装与配置时的操作步骤.

      ##### 下载与安装

      ```bash
      wget http://assets.taddream.site/downloads/clash-archived/clash-linux-amd64-v1.18.0.gz
      gzip -dc clash-linux-amd64-v1.18.0.gz > clash
      sudo mv clash /usr/local/bin/
      sudo chmod +x /usr/local/bin/clash

若上述的url无法访问, 请使用源归档url(需科学上网).

配置-1-下载ip数据库
# 这里的目录是clash默认的路径.
CLASH_CONF_DIR=$HOME/.config/clash
mkdir $CLASH_CONF_DIR
wget http://assets.taddream.site/downloads/proxy-tools/Country.mmdb -O $CLASH_CONF_DIR/Country.mmdb
touch $CLASH_CONF_DIR/config.yaml

⚠️ config.yaml是默认配置文件路径, 这样在使用clash命令时就可以不必使用-f手动指定配置文件路径.
⚠️ 这里的ip数据库url (Country.mmdb)来自我的七牛镜像, 其原下载地址在这儿.

配置-2-1-手动创建配置文件

缺点: 当订阅url更新, 你得手动更新配置文件.

clash的配置文件有什么?
有clash基础设置, 有代理节点列表, 有规则列表…

手动制作clash配置文件的方法是:

  • 在你心仪的机场购买代理服务, 获取订阅url;
  • 在你其他机器上的clash-GUI版解析你购买的订阅url(下图step1-3), 然后在step4处右键edit复制完整配置内容:
    用clash-GUI解析订阅url
  • 把内容粘贴到本机的配置文件($HOME/.config/clash/config.yaml)中.
配置文件格式形如:
mixed-port: 7890
allow-lan: true
bind-address: '*'
mode: rule
log-level: info
external-controller: '127.0.0.1:9090'
dns:
enable: true
ipv6: false
default-nameserver: [223.5.5.5, 119.29.29.29]
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
use-hosts: true
nameserver: ['https://doh.pub/dns-query', 'https://dns.alidns.com/dns-query']
fallback: ['https://doh.dns.sb/dns-query', 'https://dns.cloudflare.com/dns-query', 'https://dns.twnic.tw/dns-query', 'tls://8.8.4.4:853']
fallback-filter: { geoip: true, ipcidr: [240.0.0.0/4, 0.0.0.0/32] }
proxies:
- { name: '🇭🇰 香港-01_解锁', type: ss, server: hk01.ssyhi.xyz, port: 50200, cipher: chacha20-ietf-poly1305, password: 80b6ea6a-af66-4956-ab6e-c328c79c9f52, udp: true }
- { name: '🇭🇰 香港-02_解锁', type: ss, server: hk02.ssyhi.xyz, port: 50201, cipher: chacha20-ietf-poly1305, password: 80b6ea6a-af66-4956-ab6e-c328c79c9f52, udp: true }
- { name: '🇭🇰 香港-03_解锁', type: ss, server: hk03.ssyhi.xyz, port: 50202, cipher: chacha20-ietf-poly1305, password: 80b6ea6a-af66-4956-ab6e-c328c79c9f52, udp: true }
proxy-groups:
- { name: 山水云, type: select, proxies: [group_name, 'proxy_name', '🇭🇰 香港-06_解锁', ...] }

rules:
- 'DOMAIN,s4.ssysub1.xyz,DIRECT'
- 'DOMAIN-SUFFIX,services.googleapis.cn,山水云'
配置-2-2-脚本生成配置文件

我们的预期是, 给脚本输入订阅url, 就能自动得到config.yaml.

优点: 可设计自动化脚本, 让config.yaml随着订阅url同步更新.

参考资料: cndaqiang

详细步骤请跳转这里安装使用-方法2.

启动和系统配置

进入~/.bashrc文件,添加以下内容:

export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
# export all_proxy=socks5://127.0.0.1:7891 # 当某些程序(如游戏、P2P程序...)不支持 HTTP 代理的时候使用.

重启终端, 最后启动clash:

clash   # 最简单, 默认配置文件路径在`~/.config/clash/config.yaml`
# clash -f /path/to/your/config.yaml # 自定义配置文件路径
测试并愉快使用

执行curl -LI https://www.google.com, 终端返回含200的header信息, 说明代理生效.

实用工具

subconverter

subconverter是在各种订阅格式之间进行转换的实用程序.

安装

下述安装包url为我自建镜像, 这里是官方源站.

给subconverter命令添加软链接, 即可全局使用该命令.

cd $HOME/packages
wget http://assets.taddream.site/downloads/proxy-tools/transfor-tools/subconverter_linux64.tar.gz
tar -zxvf subconverter_linux64.tar.gz
sudo ln -s $HOME/packages/subconverter/subconverter /usr/local/bin/subconverter

使用

订阅之间的转换, 详细教程请参考. 这里只介绍订阅url → clash配置文件的场景.

方法1-利用subconverter的http服务

适合搭建转换服务器,供所有的机器使用.

# 启动subconverter服务, 默认端口是`25500`
subconverter
# 调用其API, 其中:
# %TARGET% 是目标格式, 如: "clash"(必须)
# %URL% 是订阅url(必须, 且需要经过 URLEncode 处理)
# %CONFIG% 是配置文件路径(非必须)
curl -s http://127.0.0.1:25500/sub?target=%TARGET%&url=%URL%&config=%CONFIG% > ~/.config/clash/config.yaml

其中最后一条命令中关于%URL%的制作, 示例如下:

suburl="https://dy.ssysub9.xyz/api/v1/client/subscribe?token=mytoken"
suburl_encode=$(echo $suburl | sed 's/:/%3A/g' | sed 's/\//%2F/g' | sed 's/?/%3F/g' | sed 's/=/%3D/g' | sed 's/&/%26/g')
curl -s "http://127.0.0.1:25500/sub?target=clash&url=${suburl_encode}" > ~/.config/clash/config.yaml

也可以使用urlencode的在线工具来生成上述suburl_encode变量.

最终效果: 得到的配置文件中有 Proxy, Proxy Group, Rule三个部分. 而根据这里展示的配置文件格式, 我们还缺少了mixed-port, allow-lan, mode, external-controller, dns等配置, 看来还需手动补充. 不知道是不是我操作问题.

方法2-利用subconverter的命令行工具

适合在本地制作自动化脚本.

SC_HOME=$HOME/packages/subconverter
cat << EOF >> $SC_HOME/generate.ini
[ssy2clash]
path=config.yml
target=clash
url=https://dy.ssysub9.xyz/api/v1/client/subscribe?token=mytoken
EOF
subconverter -g --artifact "ssy2clash"
cp $CLASH_CONF_DIR/config.yaml $CLASH_CONF_DIR/config.yaml.bak
cp $SC_HOME/config.yml $CLASH_CONF_DIR/config.yaml

上述脚本的执行逻辑是:

  • subconverter/generate.ini是用于格式转换命令前的配置, 在其中追加一个自定义的配置类型[ssy2clash]:
    • path是生成转换后的文件的路径, 与当前文件同目录.
    • target是目标格式, 如: “clash”(必须)
    • url是订阅url(必须, 这里就不必经过 URLEncode 处理), 也可以是自己的文件.
  • 执行格式转换命令,
  • 把结果复制到clash的配置路径下(事前备份).

在此之后, 定期执行以下命令即可实现订阅的更新:

$

Static Badge Static Badge Static Badge Static Badge
Copyright © 2023-2024 Raymond H., All Rights Reserved.