此帖被万恶的NodeSeek管理员设置了私有状态,因此同步转发到此页面一次

此方法不能保证地址始终固定不变,且地址有可能变换到IDC机房,因此需要斟酌考虑。 xhj001
以下为效果图
pH8xKhwbAglEIZPL66lAaYXKCU4W9pfH.webp

dGWkEh4EP9Mi5Hs6pcW6GwzB3wz6PWBg.webp

vpngate项目是由全世界各个国家的网络志愿者支撑起来的,大部分地址都是志愿者使用自己的家庭宽带搭建此服务。
如果需要接入,直接下载softether客户端即可

但我认为还可以做的更加完善一些,首先原生的客户端不支持自动检测节点是否可用,如果我想要使用还需要挨个测试一次,直到选择合适的节点
还有就是,不支持常见的代理协议,如果我为了使用这个节点还需要开启电脑启动客户端才能使用,那就太麻烦了。

于是,我便开始按照我的设想、以及我现有的条件,将这些缺点修复:
第一,通过docker部署在服务器上,服务器本身有透明代理
第二,这个服务器要将vpngate节点转发出一个shadowsocks代理链接,这样方便的让手机也可以连接上
第三,这个项目要可以自动检测节点状态,并按照地区将节点分类、增加备用节点机制
第四,可以自动从vpngate网站拉取节点状态,并实时更新

由于我不会编程,所以用了codex将这个想法实现了。

实现的效果

我现在可以通过转发出来的shadowsocks链接
khghIy7rIc13hXdoX3FTnjgSJTTLzGw1.webp
RZ3wExC89iGfkOqzIl4SXyiKZuBi2j7Y.webp

通过v2ray可以直接连接到我自己部署的“中转”节点
e4aIWt51KscwNgXh2LclIGC5x96RSFys.webp
这是IP质量截图,虽然仍然显示IDC机房,但IP质量比其它机场、一般VPS好太多了,关键是免费
QuYIWvxhH5V16jux5QuBxpbAZGitCprZ.webp

如果你对此感兴趣,并且需要这一项目,请接着查看部署方案

你需要有一个透明代理,至少服务器本身能够上国际互联网

因为这个项目解决的是 免费获取到纯净地址 而不是如何翻阅GFW

我用的方案是使用OpenWRT作为主路由,对整个局域网进行透明代理

对于服务器本身使用shell clash是否能够代理我不清楚,可以自己试试

随后使用docker compose进行部署

创建一个目录,比如/root/vpngate-to-proxy/
里面还需要有一个data目录,用来数据库存放节点数据
然后新建 docker-compose.yaml,里面填上

x-service-defaults: &service-defaults
  restart: unless-stopped

x-gluetun-env: &gluetun-env
  VPN_SERVICE_PROVIDER: custom
  VPN_TYPE: openvpn
  OPENVPN_CUSTOM_CONFIG: /config/client.ovpn
  DNS_ADDRESS: 127.0.0.1
  DNS_KEEP_NAMESERVER: off
  FIREWALL_OUTBOUND_SUBNETS: 8.8.8.8/32
  DOT: on
  DOT_PROVIDERS: google
  BLOCK_MALICIOUS: off
  SHADOWSOCKS: on
  SHADOWSOCKS_PASSWORD: ${SHADOWSOCKS_PASSWORD}
  SHADOWSOCKS_CIPHER: ${SHADOWSOCKS_CIPHER}
  SHADOWSOCKS_LISTENING_ADDRESS: :${SHADOWSOCKS_PORT}

x-manager-env: &manager-env
  PYTHONUNBUFFERED: "1"
  GLUETUN_CONTAINER_NAME: gluetun
  OVPN_PATH: /config/client.ovpn
  DB_PATH: /config/proxies.db
  VPNGATE_URL: ${VPNGATE_URL}
  TEST_URL: ${TEST_URL}
  SOCKS_HOST: ${SOCKS_HOST}
  SHADOWSOCKS_SERVER: ${SHADOWSOCKS_SERVER}
  SHADOWSOCKS_PASSWORD: ${SHADOWSOCKS_PASSWORD}
  SHADOWSOCKS_CIPHER: ${SHADOWSOCKS_CIPHER}
  SHADOWSOCKS_PORT: ${SHADOWSOCKS_PORT}
  PROBE_TIMEOUT: ${PROBE_TIMEOUT}
  PROBE_ATTEMPTS: ${PROBE_ATTEMPTS}
  PROBE_WORKERS: ${PROBE_WORKERS}
  MAINTENANCE_INTERVAL: ${MAINTENANCE_INTERVAL}
  SS_LOCAL_HOST: ${SS_LOCAL_HOST}
  SS_LOCAL_PORT: ${SS_LOCAL_PORT}
  CHECK_INTERVAL: ${CHECK_INTERVAL}
  CHECK_TIMEOUT: ${CHECK_TIMEOUT}
  FAIL_THRESHOLD: ${FAIL_THRESHOLD}
  COOL_DOWN: ${COOL_DOWN}
  WEB_HOST: 0.0.0.0
  WEB_PORT: 8080
  WEB_PASSWORD: ${WEB_PASSWORD}
  GLUETUN_LOG_LINES: ${GLUETUN_LOG_LINES}
  WEB_NODES_LIMIT: ${WEB_NODES_LIMIT}

services:
  gluetun:
    <<: *service-defaults
    image: qmcgaw/gluetun:latest
    container_name: gluetun
    cap_add:
      - NET_ADMIN
    privileged: true
    volumes:
      - ./vpn-data:/config
    ports:
      - "${SHADOWSOCKS_PORT}:${SHADOWSOCKS_PORT}"
    environment: *gluetun-env

  manager:
    <<: *service-defaults
    image: kindmitaishere/vpngate-to-proxy:router-26.1.14
    container_name: vpngate-manager
    depends_on:
      - gluetun
    environment: *manager-env
    volumes:
      - ./vpn-data:/config
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - "${WEB_PORT}:8080"

然后创建一个.env文件,里面填上这些东西

# VPNGate fetch
VPNGATE_URL=https://www.vpngate.net/api/iphone/
TEST_URL=http://www.google.com/generate_204

# Shadowsocks
SHADOWSOCKS_PASSWORD=vpngate
SHADOWSOCKS_CIPHER=chacha20-ietf-poly1305
SHADOWSOCKS_PORT=8388
SHADOWSOCKS_SERVER=gluetun
SS_LOCAL_HOST=127.0.0.1
SS_LOCAL_PORT=1080

# Probe / maintenance
PROBE_TIMEOUT=2
PROBE_ATTEMPTS=2
PROBE_WORKERS=30
MAINTENANCE_INTERVAL=60

# Connectivity monitor
CHECK_INTERVAL=10
CHECK_TIMEOUT=5
FAIL_THRESHOLD=3
COOL_DOWN=20
SOCKS_HOST=127.0.0.1:1080

# Dashboard
WEB_PASSWORD=kindmita
WEB_PORT=8080
WEB_NODES_LIMIT=500
GLUETUN_LOG_LINES=200

这些都是配置内容,你可以保持默认,也可以自己修改

随后 docker compose up -d

等待执行完毕后,就可以进行通过 IP:8080 访问控制面板啦
shadowsocks的默认连接方式为 IP:8388 密码 vpngate 加密方式chacha20-ietf-poly1305

效果差不多就是如图上所示的一样,当然这个项目本身就比较的简陋,我不确定你们是否能够顺利的拉取到镜像,我听说docker仓库会删除长时间不被拉取的镜像

我是米塔山