问题

  • 公司的内网需要使用独立 VPN App 才能连接
  • 无法和我使用的 VPN 共存
  • 公司用的 EasyConnect,深信服的恶臭不用多说

思路

将 EasyConnect 打包隔离起来,再暴露部分端口出来当代理端口,然后将这个代理加入分流

检索

已经有前人造好的轮子,果然深信服害人不浅啊

实现

要注意版本,示范的是 CentOS 7,具体看文档

  1. 安装 Docker 版 EasyConnect
    1
    touch ~/.easyconn
    1
    docker run --device /dev/net/tun --cap-add NET_ADMIN -ti -p 1080:1080 -p 8888:8888 -e EC_VER=7.6.3 -e CLI_OPTS="-d vpnaddress -u username -p password" hagb/docker-easyconnect:cli
  2. 开放 socks 1080 端口
    1
    iptables -I POSTROUTING -d 172.17.0.2 -p tcp -m tcp --dport 1080 -j MASQUERADE -t nat 

查缺补漏

漏洞

socks 明文传输,直接暴露在公网太过危险

解决思路

在 socks 外面再套一层 ss 进行二次加密,然后在公网上暴露 ss 的端口

实现

  1. 安装 x-ui
    1
    bash <(curl -Ls https://raw.githubusercontent.com/vaxilu/x-ui/master/install.sh)
  2. 添加入站
    1. 默认端口54321,默认账号和密码都是admin,随心添加个 ss + tcp
    2. 放行端口(我直接关掉防火墙了)
      1
      2
      3
      systemctl status firewalld.service #查看防火墙状态
      systemctl stop firewalld.service #暂时关闭防火墙
      systemctl disable firewalld.service #永久关闭防火墙
  3. 设置 xray 配置文件
    1. 面板设置 -> xray 相关设置,在 outbounds 中插入以下这段,然后保存配置 -> 重启面板
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      {
      "protocol": "socks",
      "settings": {
      "servers": [
      {
      "address": "127.0.0.1",
      "port": 1080
      }
      ]
      }
      }
  4. 在主路转发刚刚创建的入站节点的端口(家宽限定)

客户端配置

Shadowrocket

  1. 添加节点
  2. 在配置文件的规则里添加分流规则
    1. 假设节点名称为 公司,公司需要访问的域名为 xx.com
    2. 类型选 DOMAIN-SUFFIX,策略选 公司,域名填入 xx.com

Clash

随便举个例子,详见官方文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 只有访问`http://172.16.5.xxx`的流量才会走 vpn 的流量

# 增加一个名字是 vpn 的 sock5 代理
proxies:
- {"name": "vpn", "type": "socks5", "server": "127.0.0.1", "port": "1080"}

# 添加 ip-cidr 的规则
# 增加一个名字是 vpn 的 sock5 代理
proxies:
- {"name": "vpn", "type": "socks5", "server": "127.0.0.1", "port": "1080"}

# 添加 ip-cidr 的规则
rules:
- IP-CIDR,172.16.5.0/24,vpn

踩坑

问题

该容器不会开机自动启动

解决

在 Linux 系统上,您可以使用 Systemd 来配置一个服务,使得容器在系统启动时自动启动。下面是一个示例步骤:

  1. 创建 Systemd 服务文件:

    /etc/systemd/system/ 目录下创建一个以 .service 结尾的文件,比如 mydockerapp.service。打开该文件并添加以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [Unit]
    Description=My Docker Container
    Requires=docker.service
    After=docker.service

    [Service]
    Restart=always
    ExecStart=/usr/bin/docker start -a mydockercontainer
    ExecStop=/usr/bin/docker stop -t 2 mydockercontainer

    [Install]
    WantedBy=default.target

    请确保将 mydockercontainer 替换为您的 Docker 容器的实际 ID。

  2. 重载 Systemd:

    运行以下命令重新加载 Systemd 配置文件:

    1
    sudo systemctl daemon-reload
  3. 启用并启动服务:

    启用服务,使其在系统启动时自动启动,并启动服务:

    1
    2
    sudo systemctl enable mydockerapp
    sudo systemctl start mydockerapp

    确保将服务名称替换为您在第一步中创建的服务文件的名称。

这样配置后,您的 Docker 容器应该会在系统启动时自动启动。请注意,确保 Docker 服务本身在系统启动时也已启动,因为上述服务文件中使用了 Requires=docker.serviceAfter=docker.service