读书,行路,阅人

科学上网

2024.05.22 5569 12

序(第一重境界:吹水境界)

科学上网于我而言,为了学习/工作/英语/技术/交友,查阅资料,提升自己。因为你不知道你不知道的,所以我需知道自己不知道的才是知道的开始。信息自由是自然的趋势,虽然现在有各种技术和规则上的限制,但世上没有密不透风的墙,有部分人已经实现了信息自由,我更相信自然的能力,总有一天,人类会实现在生物层面上的信息自由。

以下是我工作和生活需要科学上网的点:

  1. 查阅一手资料,掌握最前沿技术和信息差。如:google(周边服务)、chatgpt、YouTube教学视频。
  2. 工作相关的技术类网站。如:云服务(google、Amazon、Azure、Oracle等)代码仓库(github/gitlab等),Stack Overflow等
  3. 交友/新闻/资讯/博客等,可以学习英语同时掌握资源,如:Telegram、Medium
  4. …待完善-TODO…

概念(第二重境界:关键词)

你是否听过或看过下面的一些词:

  1. VPN(用来科学上网的技术):Virtual Private Network,虚拟专用网络,VPN是一种技术,通过在公共网络(如互联网)上创建一个加密的通道,使得用户可以安全地传输数据。使用VPN可以提高网络隐私和安全性,特别是在使用公共Wi-Fi网络时。它还可以用来绕过地理限制,访问不同地区的内容。
  2. VPS(部署VPN技术的服务器):Virtual Private Server,虚拟专用服务器,VPS是一种虚拟服务器技术,通过将一台物理服务器分割成多个虚拟服务器,每个虚拟服务器都可以运行自己的操作系统,并拥有独立的资源和环境。
  3. Shadowsocks:一种开源的代理软件,主要用于绕过互联网审查,实现安全和匿名的网络访问。它最初由中国程序员 Clowwindy 创建,旨在帮助用户突破防火墙限制。
  4. Socks(一种网络协议):用于在网络上建立代理服务器和客户端之间的通信。它的主要功能是在网络层上进行数据传输,通常用于实现网络匿名性、绕过防火墙和访问受限内容。
  5. Vray/V2ray(VPN客户端)
  6. IKEv2/IPsec(VPN协议,MacBook自带VPN默认配置)
  7. L2TP/IPSec(VPN协议,MacBook自带VPN默认配置)
  8. VMess/VLESS(常用V2Ray/Clash等VPN客户端支持的协议之一)

上面的关键词总体分为三类

  1. VPN服务器
  2. VPS(对于科学上网,建议通过自建的方式)
    1. 自建(安全,需要点技术门槛,本文主要是针对自建进行描述)
    2. 机场
      1. 机场主需要公开售卖,使用的人也比较多,所以,都会被重点关注,非常容易被封;
      2. 机场需要购买一堆服务器,所以,很容易经营不善跑路;
      3. 使用机场很容易泄漏自己的隐私,因为你的所有流量都经过了机场的服务器;
  3. VPN协议
  4. VMess, VLESS, ShadowSocks(R), Socks5, HTTP(s),Snell,Trojan …
  5. IKEv2/IPsec和L2TP/IPsec
  6. VPN客户端
  7. Vray/V2ray
  8. Clash
  9. WireGuard
  10. Shadowsocks

原理(第三重境界:原理境界):

TCP BBR(Bottleneck Bandwidth and Round-trip propagation time):

是由Google设计,于2016年发布的拥塞算法。以往大部分拥塞算法是基于丢包来作为降低传输速率的信号,而BBR则基于模型主动探测。该算法使用网络最近出站数据分组当时的最大带宽和往返时间来创建网络的显式模型。数据包传输的每个累积或选择性确认用于生成记录在数据包传输过程和确认返回期间的时间内所传送数据量的采样率。该算法认为随着网络接口控制器逐渐进入千兆速度时,分组丢失不应该被认为是识别拥塞的主要决定因素,所以基于模型的拥塞控制算法能有更高的吞吐量和更低的延迟,可以用BBR来替代其他流行的拥塞算法,例如CUBIC。Google在YouTube上应用该算法,将全球平均的YouTube网络吞吐量提高了4%,在一些国家超过了14%。

BBR之后移植入Linux内核4.9版本,并且对于QUIC可用。

如果开启,请参看 《开启TCP BBR拥塞控制算法

Shadowsocks:

使用 SOCKS5 代理协议,通过在客户端和服务器之间建立加密通道,隐藏用户的实际流量,使其看起来像是普通的 HTTPS 流量,从而绕过网络审查和封锁,其特点是:

  1. 加密通信:Shadowsocks 使用多种加密算法(如 AES、ChaCha20…)来确保数据在传输过程中不被窃听或篡改。
  2. 代理服务器:用户可以通过 Shadowsocks 客户端连接到配置好的远程代理服务器,从而访问被封锁的内容。
  3. 灵活配置:Shadowsocks 支持多种配置方式,可以在不同操作系统(如 Windows、macOS、Linux、Android、iOS)上运行,适用于各种网络环境。

使用场景:

  1. 绕过审查:在互联网审查严格的国家或地区,用户可以使用 Shadowsocks 访问被封锁的网站和服务,如 Google、Facebook 等
  2. 隐私保护:通过加密流量,Shadowsocks 能有效保护用户的隐私,防止网络监控和数据窃取。
  3. 访问限制内容:用户可以通过连接到不同地区的代理服务器,访问仅在特定区域提供的内容,如流媒体服务、游戏服务器等

对比VPN区别:

  1. 协议和技术:VPN 通常使用标准的 VPN 协议(如 OpenVPN、IPsec),而 Shadowsocks 使用 SOCKS5 代理协议。
  2. 性能:由于 Shadowsocks 的设计更加轻量级,在某些情况下,其连接速度和性能可能优于 VPN。
  3. 检测难度:Shadowsocks 的流量伪装技术使其比传统 VPN 更难被检测和封锁,特别是在严格的网络环境中。

Socks:

是一种网络协议,用于在网络上建立代理服务器和客户端之间的通信。它的主要功能是在网络层上进行数据传输,通常用于实现网络匿名性、绕过防火墙和访问受限内容。以下是 SOCKS 的主要特点和功能:

  1. 代理功能:SOCKS 协议允许客户端在本地和远程服务器之间建立代理连接,以便通过代理服务器访问 Internet 上的资源。
  2. 版本:目前最常用的版本是 SOCKS5,它支持认证和更多的传输协议。而 SOCKS4 则较为简单,没有 SOCKS5 那样的扩展功能。
  3. 灵活性:SOCKS 可以工作在网络层(OSI 模型的第三层),与传输层(如 TCP、UDP)无关,因此支持多种传输协议和应用程序。
  4. 匿名性:通过使用 SOCKS 代理,用户可以隐藏其真实 IP 地址,保护隐私,实现匿名访问网络。
  5. 绕过防火墙:有时,SOCKS 代理可以帮助用户绕过防火墙和网络限制,访问被封锁的网站和服务。
  6. 应用场景:SOCKS 协议广泛用于各种网络应用场景,包括网页浏览、电子邮件客户端、聊天应用程序、下载工具等。

实践(第四重境界:实践境界)

  1. 选择VPS(付费和免费)VPS 建议安装成 Ubuntu,版本用 18.04,20.04,22.04 都行

    1. 付费:关注位置流量

      1. 配置。服务器的配置不需要很高,用最小的型号就可以了,一般来说,1个CPU,1GB内存,50GB硬盘是足够了;
      2. 流量。服务器主是要要年有没有足够的流量和带宽,很多VPS提供商在流量和带宽上会收额外的费用,要小心。一般来说,1TB流量和30Mbps带宽是足够了,如果不看电影的话,500GB左右一个月的流量也够了;
      3. 位置。服务器的线路和地理位置还是比较重要的,一般来说,香港,台湾,日本,韩国,新加坡,美国,欧洲都是不错的选择。
        1. 线路。 经过我长期的实践,GIA CN2 的线路是非常好的。但是你要小心,很多VPS提供商会在宣传上说自己是 CN2 的线路,但是,实际上并不是
        2. 原生 IP。很多海外的应用都有地区限制,会屏蔽IP,所以,使用美国的原生 IP 也是很重要的。
    2. 免费(白嫖技术):

      1. 亚马逊云AWS EC2香港、日本或韩国申请个免费试用一年的EC2 VPS (支持银联卡),我用的是国际版(我用的是VISA信用卡)
      2. 谷歌云Google Cloud Platform提供免费试用三个月,赠送300刀赠金(需要国际信用卡,可以无限续杯),免费政策及额度请参考参考官方说明文档
      3. 微软云Microsoft Azure提供免费一年的服务(B1S实例),而且每个月有 100G 的免费流量,并赠送200刀赠金。(需要国际信用卡)
      4. 甲骨文云Oracle Cloud两台VPS无限期使用,可选美日韩等地(需要国际信用卡)

      注意:

      1. 像AWS云EC2免费服务是有限制的,我就没注意看被扣费了(最好申请通过后换绑信用卡为虚拟卡限制扣费),你要知道很多云厂商的 VPS 服务器和流量是分开计费的,所以,你要确认一下你的云帐单以免出现不预期的费用。
      2. 网速比较(可以ping对比一下):香港网速应该是比较好的,但是香港的成本也是比较高的(使用 Microsoft Azure 的 East Asia 可以把 VPS 买在香港区)。台湾的网速也是不错的(可以通过 Google Cloud 购买),日本的网速其次,新加坡再次之,然后是美国的东海岸(凤凰城)。是,因为线路的问题,如果没有为中国区优化的线路,丢包率是非常大的,日本区 ping 值虽然很低,但是经常性的丢包,好的线路的美国的 ping 值虽然大,但是也会飞快。
      3. Google Cloud Platform - GCP 的香港和台湾节点也是很快的。但是你要能买GCP的主机,你还得先翻墙,所以,感觉有点死锁了。所以,你可能先用其它方式翻墙,然后再到GCP上购买。
  2. 搭建代理服务

    1. 安装docker,可以参考官方文档:

      1. Ubuntu 上的 Docker CE 安装
      2. CentOS 上的 Docker CE 安装
    2. 开启 TCP BBR 拥塞控制算法,了解参考上面的概念介绍(可通过x-ui面板的脚本开启)

    3. 申请域名和ssl证书(非必要,如果没有域名的话只能ip了,可通过下面x-ui面板的脚本设置,也可手动设置)

    4. 安装X-ui面板(推荐,自用,有过被封端口,切换端口即可),搭建支持Vmess/Vless等协议V2ray代理服务(安装macbook的vpn客户端工具V2ray即可访问代理服务)

      1. 参考文档:
        1. https://github.com/real-jiakai/blog/issues/3
        2. https://jiasupanda.com/x-ui
      2. 参考视频(需翻墙):https://drive.google.com/file/d/1cXcIHCNbZuXpL9UrR_h6PrTzOiGXr4_L/view
      bash <(curl -Ls https://raw.githubusercontent.com/vaxilu/x-ui/master/install.sh)
      # 只需要几秒钟,就会提示:出于安全考虑,安装/更新完成后需要强制修改端口与账户密码。
      # 这里直接输入 “y”,回车,具体可以看右侧的我的设置:用户名(admin)、密码(admin123456)、端口(8377)
      # 上述安装完成后,输入:x-ui命令,即可看到命令行界面,目前我们需要用的到就是 15(一键安装 bbr)和 16(一键申请SSL证书,可省略)。
      # 通过命令:ufw allow 8377 打开 8377(之前我们设置的)端口。云服务器还需要设置入站规则,开放这个端口
      # 浏览器访问IP:端口,输入之前谁在的用户名密码即可访问
      # 配置xray模板,参考上述文档连接
      # 新增入站,参考上述文档连接
      
    5. Gost 设置 HTTPS 服务(推荐,自用gost 是一个非常强的代理服务,它可以设置成 HTTPS 代理,然后把你的服务伪装成一个Web服务器,我感觉这比其它的流量伪装更好,也更隐蔽。这也是这里强烈推荐的一个方式。 接下来就是启动 gost 服务了,我们这里使用 Docker 的方式建立 gost 服务器。

      #!/bin/bash
      
      # 下面的四个参数需要改成你的,ssl证书通过x-ui面板脚本即可生成,注意是fullchain证书和私钥的key
      DOMAIN="域名"
      USER="账号"
      PASS="密码"
      PORT=443
      
      BIND_IP=0.0.0.0
      CERT_DIR=/etc/letsencrypt
      CERT=${CERT_DIR}/live/${DOMAIN}/fullchain.pem
      KEY=${CERT_DIR}/live/${DOMAIN}/privkey.pem
      sudo docker run -d --name gost \
          -v ${CERT_DIR}:${CERT_DIR}:ro \
          --net=host ginuerzh/gost \
          -L "http2://${USER}:${PASS}@${BIND_IP}:${PORT}?cert=${CERT}&key=${KEY}&probe_resist=code:404&knock=www.google.com"
      
      # 来查看 gost 是否在运行。
      sudo docker ps
      # 来查看 gost 是否在监听 443 端口。
      netstat -nolp | grep 443 
      #  来查看 gost 的日志。
      sudo docker logs gost
      # 使用下面的命令验证你的 gost 服务是否正常
      curl -v "https://www.google.com" --proxy "https://域名" --proxy-user '账号:密码@@'
      
    6. 设置 ShadowSocks 服务 (不是很推荐,自用过,用过域名+443端口被封过) 注:ShadowSocks 被查的机率非常大,不推荐使用。自用时被封过,换了最新的加密算法、协议和混淆,443端口用IP好像没封过,用域名就被封过(如果有隧道转发,可以使用)****

      # 来源:左手听风,耗子叔(RIP)的命令脚本如下:
      #!/bin/bash
      
      SS_PORT=1984
      SS_PASSWD=MyPasswd
      
      sudo docker run -dt --name ss \
         -p ${SS_PORT}:${SS_PORT} mritd/shadowsocks \
         -s "-s 0.0.0.0 -p ${SS_PORT} -m aes-256-cfb -k ${SS_PASSWD} --fast-open"
      
      
      # 自用脚本用的是shadowsocks-r,配置如下(参考:https://whisperloli.github.io/2019/02/16/AWS_VPN.html):
      docker pull teddysun/shadowsocks-r
      # /etc/shadowsocks-r/config.json配置如下:
      {
          "server":"0.0.0.0",
          "server_ipv6":"::",
          "server_port":9000,
          "local_address":"127.0.0.1",
          "local_port":1080,
          "password":"密码",
          "timeout":120,
          "method":"chacha20-ietf", # 加密算法
          "protocol":"auth_aes128_md5", # 协议
          "protocol_param":"",
          "obfs":"tls1.2_ticket_auth", # 混淆
          "obfs_param":"",
          "redirect":"",
          "dns_ipv6":false,
          "fast_open":true,
          "workers":1
      }
      docker run -d -p 443:9000 -p 443:9000/udp --name ssr --restart=always -v /etc/shadowsocks-r:/etc/shadowsocks-r teddysun/shadowsocks-r
      # macbook客户端用的shadowsocksX-NG-R8,github上搜就行
      
    7. 设置L2TP/IPSec和IKEv2/IPsec服务 (不推荐,用过) 注:VPN方式被查的机率非常大,不推荐使用 L2TP/IPSec 的启动脚本,其中的三个环境变量 USERPASSPSK 需要替换一下。

      #!/bin/bash
      
      USER=someone
      PASS=password
      PSK=psk_key
      
      sudo docker run -d  --privileged \
          -e PSK=${PSK} \
          -e USERNAME=${USER} -e PASSWORD=${PASS} \
          -p 500:500/udp \
          -p 4500:4500/udp \
          -p 1701:1701/tcp \
          -p 1194:1194/udp  \
          siomiz/softethervpn
      
      # 自用过的脚本命令,如下(也是支持L2TP协议的,具体参数参考github官网)
      wget https://git.io/vpnsetup -O vpnsetup.sh && sudo \
      VPN_IPSEC_PSK=${PSK} \
      VPN_USER=${USER} \
      VPN_PASSWORD=${PASS}' sh vpnsetup.sh
      
    8. CloudFlare免费VPN服务(需绑定VISA信用卡)

      1. Warp+ (可获取免费流量24.多PB的大流量包)
        1. 网站获取:https://warp.halu.lu/
        2. Telegram机器人获取
      2. Zero Trust:CF后台开通免费计划服务设置团队名即可
      3. 配置worker的vless协议代理服务脚本,生成获取UUID:https://1024tools.com/uuid/
    9. VPN客户端使用(参考链接🔗

      1. Chrome 插件 SwitchyOmega进行代理设置,配置上面的gost的HTTPS服务,在 Protocol 中选择 HTTPS, 填上你的 Gost 的 VPS 服务器和端口号,点后面的 🔒 按钮,输入 Gost 服务器的用户名和密码

        具体的教程可以参看官方教程 - 《最新 SwitchyOmega 使用教程快速入门篇

        如果无法直接配置 HTTPS 代理,具体原因可能是因为你设置了probe_resist以开启探测防御功能。这里,你需要在服务器端设置 knock 参数(参看 用 Gost 设置 HTTPS 服务 中的“注意”一节 )

        或是,干脆使用 gost 客户端在本机启动一个 SOCKS 5的代理服务用来代替(gost -L socks5://:1080 -F 'https://USER:PASS@DOMAIN:443'),然后在 SwitchyOmega 配置代理为’127.0.0.1:1080’即可。

      2. V2ray