作为一个程序员,科学上网是必备的技能之一。科学上网可以让我接触到一手的学习资料,扩展自己的视野,更高效的去检索信息等等。这篇文章分享一些我的科学上网的方式与经验。

思路

我个人科学上的方式是购买机场的服务 + 自建

其中机场的服务能保证我在绝大的时候都能够科学上网,即使我自己的被屏蔽之后,我依然能通过第三方提供的服务来再次恢复自建的节点。

而自建的节点,更多的是为了保证数据的安全以及IP地址不会频繁的去变动。

这就是我科学上网的总体思路,我自用感觉是完全足够了。 左耳朵耗子的这篇《科学上网》也分享了很多他科学上网的方法,值得一看。

购买现成的服务

我购买的是shadowsocks的服务 (链接含aff)。

他家的服务我从2017年就开始接触,每次一买就是三年,稳定性能接受(在某些时期会出现抖动,这段时期内节点会频繁的更新,能接受可以选择这个)。

服务有Lite和Pro版本,个人Lite就好了,$19.95/年,$49.95/三年, 价格不算高,支持支付宝付款。

速度方面,这是用美国的节点看Youtube,速度还可以(当然速度还取决于你家的带宽,出口等,仅供参考)。

如何购买

购买很简单,大部分的机场都差不多,以我购买这个为例子,如下图所示。

总结了一下可能需要注意的点:

  • 看看节点的路由,需要质量高的,就选好一点路线的,什么国际专线 IPLC Access之类的,当然价格也会贵一些;

  • 看看流量是否符合自己的需求,一般都会有流量限制。

  • 支付选择多年会有一定的优惠,双11,黑五等可能会有活动(我上次双11买的Lite,不到$30买了3年);

如何使用

一般购买的机场服务都会提供一个订阅地址,可以结合客户端使用。

目前个人使用下来,桌面/安卓端使用 Clash, iOS端使用 Shadowrocket, 体验还不错;

如何上述链接失效,可以到这个地址去找一找。

下面主要介绍一下 MacOS 和 iOS 的使用。

ClashX

软件下载好后,如下图所示,打开配置中的远程配置管理

然后到购买的服务中”获取地址“,复制地址后,在ClashX中添加

添加完成后,就可以看到现在的配置已经切换到了刚刚添加的“clashx"

这样就完成添加了。

Shadowrocket

添加比较简单,如下图。

几种代理模式

不管是使用ClashX还是Shadowrocket, 或者其他的软件,这三种模式都是有的:

  • 全局代理 (Global/Proxy) : 全部的访问都走代理转发。

  • 规则模式 (Rule/Config): 按照规则转发,国内直连,国外走代理转发。

  • 直连(Direct):全部不走代理,都直连。

全局代理和规则模式都可以单独选择固定节点,也可以配置一个自动选择,自动会根据代理节点的连通性,延迟来选择代理节点。

如何自建

自建的话方案有很多,我目前使用的是 trojan + ws 的方式。trojan使用的是trojan-go这个项目。

下面是详细的步骤。

购买海外服务器

首先,肯定是需要一个海外的服务器,我目前用的是racknerd家的服务器。

他家会推出一些比较便宜的机器大概 $10 就能用一年,一个月1000GB的流量,自己用完全是够了。

他家黑五,新年都会搞一些活动,挺便宜的,这里就有一些以前黑五的,最低 $10.28 就能买一年,搭梯子完全够用了。

当然也有一些大佬,收集了一些其他的活动, 其中也有不少比较便宜的,按需购买。

购买海外服务器需要注意测试IP是否能连通,有些VPS IP可能被屏蔽了。买了第一时间去测试一下,大部分服务商之后换IP是需要额外收费的, 但刚买的这段时间,可以尝试和客服沟通,一般是给换的。

配置服务器

购买完成,系统初始化好后,就可以配置了。最简单的就是全部使用docker安装了。这里就不详细展开了,只描述一下大概步骤。

  • 安装docker 可以参考官方文档

  • 然后,准备好配置文件 config.json

详细的配置说明看官方文档,下面是我用的。

{
    "run_type": "server",
    "local_addr": "127.0.0.1",
    "local_port": 443,
    "remote_addr": "127.0.0.1",
    "remote_port": 80,
    "password": [
        "ugbajhgsajgdasdhjksa"
    ],
    "ssl": {
        "cert": "/etc/trojan-go/cert.pem",
        "key": "/etc/trojan-go/key.pem",
        "sni": "trojan.example.com" ,
        "verify_hostname": false
    },
   "websocket": {
        "enabled": true,
        "path": "/dksdasd"
   }
}
  • 为了伪装的更像,后面可以用nginx跑个网站。
docker run --name nginx -p 80:80 -d nginx
  • 一个域名,可以到 cloudflare.com, name.com 等等很多家注册。

  • 一个证书,利用ACME快速的申请证书,详细文档

  • 然后我们就可以启动服务了。

docker run \
    --name trojan-go \
    -d \
    -v /etc/trojan-go/:/etc/trojan-go \
    --network host \
    p4gefau1t/trojan-go
  • 最后注意一下是否有防火墙或iptables, 如果有,需要放行443端口。

这样我们的服务就启动好了。

ClashX

首先 ClashX 需要更新到比较新的版本,如果老版本,可能不支持 trojan-go 开启 ws。

然后,我们在 “配置 > 打开配置文件” , 配置一下config.yml文件,然后选择该文件即可。

如我的配置文件为:

port: 7890
socks-port: 7891
allow-lan: false
mode: Global
log-level: silent
external-controller: 127.0.0.1:9090
secret: ""
proxies:
  - 
    name: trojan-ws-xx
    type: trojan
    server: trojan.example.com
    port: 443
    password: ugbajhgsajgdasdhjksa
    # sni: trojan.example.com
    alpn:
      - http/1.1
    tls: true
    # skip-cert-verify: true
    network: ws
    ws-opts:
      path: /dksdasd

proxy-groups:
  - 
    name: Proxy
    type: select
    proxies:
      - trojan-ws-xx

rules:
  - IP-CIDR,91.108.4.0/22,Proxy,no-resolve
  - IP-CIDR,91.108.8.0/22,Proxy,no-resolve
  - IP-CIDR,91.108.12.0/22,Proxy,no-resolve
  - IP-CIDR,91.108.16.0/22,Proxy,no-resolve
  - IP-CIDR,91.108.56.0/22,Proxy,no-resolve
  - IP-CIDR,149.154.160.0/22,Proxy,no-resolve
  - IP-CIDR,149.154.164.0/22,Proxy,no-resolve
  - IP-CIDR,149.154.168.0/22,Proxy,no-resolve
  - IP-CIDR,149.154.172.0/22,Proxy,no-resolve
  - DOMAIN-SUFFIX,local,DIRECT
  - IP-CIDR,127.0.0.0/8,DIRECT
  - IP-CIDR,172.16.0.0/12,DIRECT
  - IP-CIDR,192.168.0.0/16,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT
  - IP-CIDR,17.0.0.0/8,DIRECT
  - IP-CIDR,100.64.0.0/10,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,Proxy

Shadowrocket

如下图所示,在Shadowrocket中添加一个服务,类型是trojan, 地址端口添加我们服务端的 域名/端口/密码,Transport 选择 websocket, 并把ws路径设置上去。这样就设置完成了。

自建进阶(Trojan + ws + cloudflare cdn)

自建🪜有个问题就是节点IP很可能被封,而一些VPS更换节点IP是需要收费的。为了解决这个问题,目前可以在节点前套一层cloudflare的cdn。这样直连的其实是Cloudflare的IP,能解救被封的IP。同时这种方法也能隐藏我们真实的IP。操作步骤如下:

注册 Cloudflare

直接到 Cloudflare 使用邮箱注册。

添加域名到Cloudflare

登陆到Cloudflare后,到“网站”中,输入你的域名,并“添加站点”。

选择 Free 的计划就好了。

Cloudflare 会自动检测你当前的域名解析,可以做到一键导入。

然后,Cloudflare 会给你一个 Cloudflare 的NS地址。到域名的DNS服务商那里将原来的NS地址更换成这个地址, 各家稍微不一样,一般都在域名管理里面。

完成后,等待一段时间,可以到Cloudflare完成检测。

添加解析,并开启中转

域名成功的使用Cloudflare DNS解析后,到DNS记录中添加A记录,ipv4填写自己的IP, 然后开启“代理状态”中的这朵云,这样Cloudflare会给你中站流量。

这样,我们对外的IP就是Cloudflare的IP了。