目录

  • 前言
  • 代理服务器
  • 服务器初始化
  • 构建代理服务器
  • windows连接
  • 配置自定义PAC代理
  • 客户端容器
  • 前言

    目前有项目有调用google drive api的需求,我们这里需要一个代理服务器来完成稳定调用的条件。而且目前很多机场不是特别稳定,尤其是在晚上访问人数较多的时候,如果有自己的代理服务器的话,相对来说也就不用受这方面的干扰了

    代理服务器

    购买一台海外服务器,从海外运营商国内运营商购买都可以,建议买大公司的,小公司网络不稳定,如果只有代理需求不如去机场买套餐

    服务器初始化

    参考本站服务器初始化相关内容,海外服务器不需要设置代理仓库,这里我们只需要docker

    构建代理服务器

    这里使用shadowsocks,以及docker构建的方式,其他构建方式参考官方GitHub以及官网文档

    version: '3.7'
    services:
      shadowsocks:
        restart: always
        container_name: shadowsocks
        image: shadowsocks/shadowsocks-libev:v3.3.5
        ports:
          - 9527:8388/tcp
          - 9527:8388/udp
        environment:
          - METHOD=aes-256-gcm
          - PASSWORD=passwd
          - SERVER_ADDR=0.0.0.0
          - TIMEOUT=60
          - DNS_ADDRS=8.8.8.8,8.8.4.4
          - TZ=UTC
    

    相关参数的含义见Shadowsocks-libev Docker Image,记得开放对外的端口,这里是9527

    构建

    #老版本的是docker-compose up -d 注意自己的compose版本
    docker compose up -d
    

    windows连接

    这里只展示windows连接的方法,其他服务/操作系统的连接方式同样参考官方文档

    首先,下载最新版本的Shadowsocks客户端的压缩包,解压后直接运行,右击任务栏图标

    我们需要编辑服务器地址信息

    此时右击任务栏shadowsocks -> 系统代理 -> 全局代理 就可以使用代理服务器访问了所有网站了

    配置自定义PAC代理

    右击任务栏shadowsocks -> PAC模式 -> 编辑本地PAC文件,打开pac.txt,可以看到

    var __USERRULES__ = [];
    var __RULES__ = [
    //...
    ];
    

    其中__RULES__为已有规则,这里为了演示方便直接删掉,然后在系统代理中选择PAC代理,可以发现,现在所有访问的网站均不会走代理,此时添加规则

    var __USERRULES__ = [];
    var __RULES__ = [
    "||baidu.com"
    ];
    

    则,访问百度可以发现以及走了代理进行访问,更多规则参考Adblock Plus filters explained

    使用通配符也可以,比较容易理解

    var __USERRULES__ = [];
    var __RULES__ = [
    "*.baidu.com/*"
    ];
    

    客户端容器

    官网只给出了服务端的容器构建,没有给出客户端的容器构建,我们看下源码的dockerfile,目前的发布docker版本是v3.5.5

    FROM alpine
    LABEL maintainer="kev <noreply@datageek.info>, Sah <contact@leesah.name>"
    
    ENV SERVER_ADDR 0.0.0.0
    ENV SERVER_PORT 8388
    ENV PASSWORD=
    ENV METHOD      aes-256-gcm
    ENV TIMEOUT     300
    ENV DNS_ADDRS    8.8.8.8,8.8.4.4
    ENV TZ UTC
    ENV ARGS=
    
    COPY . /tmp/repo
    RUN set -ex \
     # Build environment setup
     && apk add --no-cache --virtual .build-deps \
          autoconf \
          automake \
          build-base \
          c-ares-dev \
          libcap \
          libev-dev \
          libtool \
          libsodium-dev \
          linux-headers \
          mbedtls-dev \
          pcre-dev \
     # Build & install
     && cd /tmp/repo \
     && ./autogen.sh \
     && ./configure --prefix=/usr --disable-documentation \
     && make install \
     && ls /usr/bin/ss-* | xargs -n1 setcap cap_net_bind_service+ep \
     && apk del .build-deps \
     # Runtime dependencies setup
     && apk add --no-cache \
          ca-certificates \
          rng-tools \
          tzdata \
          $(scanelf --needed --nobanner /usr/bin/ss-* \
          | awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \
          | sort -u) \
     && rm -rf /tmp/repo
    
    USER nobody
    
    COPY ./docker/alpine/entrypoint.sh /entrypoint.sh
    
    CMD /entrypoint.sh
    

    以及entrypoint.sh

    #!/bin/sh
    
    if [[ -f "$PASSWORD_FILE" ]]; then
        PASSWORD=$(cat "$PASSWORD_FILE")
    fi
    
    if [[ -f "/var/run/secrets/$PASSWORD_SECRET" ]]; then
        PASSWORD=$(cat "/var/run/secrets/$PASSWORD_SECRET")
    fi
    
    exec ss-server \
          -s $SERVER_ADDR \
          -p $SERVER_PORT \
          -k ${PASSWORD:-$(hostname)} \
          -m $METHOD \
          -t $TIMEOUT \
          -d $DNS_ADDRS \
          -u \
          $ARGS
    

    可以看到他这里甚至没有给出客户端构建的必要参数,而且ss-server也是写死的,我们可以通过docker-compose中的command重写最后的cmd命令来完成客户端容器的构建,这里给出示例

    version: '3.7'
    services:
      shadowsocks-client:
        restart: always
        container_name: shadowsocks-client
        image: shadowsocks/shadowsocks-libev:v3.3.5
        ports:
          - 9527:1080
        command:
          - "/bin/sh"
          - "-c"
          - "exec ss-local -s your_sw_server_ip -p your_sw_server_port -b 0.0.0.0 -l 1080 -k your_sw_server_passwd -m your_server_method -t 60"
    

    其实也可以重写他的docker构建自己的shadowsocks客户端,但是没啥难度也没啥必要,这里就不这么处理了

    此时使用代理,即可完成socket代理http请求

    curl --socks5-hostname localhost:9527 https://www.baidu.com
    作者:admin  创建时间:2025-02-26 14:47
    最后编辑:admin  更新时间:2025-02-26 15:51