深信服easyConnect二级代理配置

前提场景摘要

  1. 多名开发人员需要VPN同时在线

  2. 或者单开发人员多项目VPN需要来回切换很麻烦

  3. 向生产环境Linux服务器做自动化部署

Windows所需代理工具

Proxifier

Proxifier激活码

5EZ8G-C3WL5-B56YG-SCXM9-6QZAP(Standard Edition)

L6Z8A-XY2J4-BTZ3P-ZZ7DF-A2Q9C(Portable Edition)

P427L-9Y552-5433E-8DSR3-58Z68(MAC)

CCProxy8.0

序列号:JHEHIHCDDAHC

注册码:15f7f78febfaee55afeafefff7cb7fdfb3

创建新的网段docker虚拟网卡

docker network create --subnet=172.18.0.0/16 easyConnectProxy

如果不创建每次在使用docker会使用172.17网段自动分配,接下来要做路由策略配置 ,如果是自动分配服务器重启后每次还要查询docker内自动分配的IP去做路由策略配置很麻烦。

使用docker-easyconnect 创建多个VPN客户端登陆

docker run \
 --device /dev/net/tun \
 --cap-add=NET_ADMIN -ti \
 --net easyConnectProxy --ip 172.18.0.2 \
 -p 1080:1080 \
 -p 8888:8888 \
 -e SOCKS_USER=ahWater \
 -e SOCKS_PASSWD=ahWater84BB \
 -e EC_VER=7.6.8 \
 -e CLI_OPTS="-d https://0.0.0.0:8888 -u user -p passwd" \
 --name ec_bb \
  hagb/docker-easyconnect:cli

作为网关和/或提供 socks5和http 代理服务,并且自带VPN掉线自动重连的功能。

但不保证VPN被单方面给切断或被限制带来的影响。

docker并且自带创建:1080端口 SOCKS5的代理 、8888端口 HTTP的代理

可以在本地直接通过下面的在本地配置SOCKS5代理直接代理

宿主机路由表下一跳到容器直接访问(如果需要)

更详细的代理转发可以看docker-easyconnect的文档。

查看容器ip配置路由策略(如果创建了网卡就不用了,如果没有第一步创建docker虚拟网卡需要手动到docker查ip)

docker exec -it b5ef01e6b5c0 /bin/bash
ip addr

#例如查到地址为:172.18.0.2 下面要用到

针对单一easyconnect容器本地路由策略

路由策略配置

12.34.1.0/24的路由下一条到172.18.0.2的容器内

ip route add 12.34.1.0/24 via 172.18.0.2 mtu 1400 table 3
ip rule add iif lo table 3

宿主机通过路由表(将容器地址作为下一跳路由)来设置透明代理让宿主机访问12.34.1.0/24

这样宿主机本身就可以访问12.34.1.0/24的所有内容

如果要追加路由地址 例如:

ip route add 192.168.200.0/24 via 172.18.0.255 mtu 1400 table 2

开机自动添加路由配置

路由信息并非持久化 、当重启后服务器会恢复默认路由表,把上面的命令添加到rc.local让每次重启自动添加路由信息

vim /etc/rc.d/rc.local

在开发本地配置SOCKS5代理

使用Proxfier代理工具在Windows或Mac下配置好SOCKS5代理,设置好开机自启,就可以避免VPN来回登录的麻烦,并且大家可以通过SCOKS5公用一个VPN,此操作并不保证安全性问题,但是降低了开发环境的联调时间成本,还可以通过此代理向生产环境自动部署。

如果不是12.34网段其他VPN,以上操作同理新创建Docker 和SOCKS5代理,Proxifier可以同时代理多个SOCKS,添加其他网段的代理,避免VPN来回切换的问题

致此通过单一的easyconnect docker 代理就完成了,下面整合多easyconnect代理。

easyConnect容器多网段统一整合代理转发

添加套娃代理容器

docker stop sockd
docker rm sockd
docker run \\
    --device /dev/net/tun \\
    --cap-add=NET_ADMIN -ti \\
    --name sockd \\
    --publish 2020:2020 \\
    --net easyConnectProxy --ip 172.18.0.255 \\
    -v /root/sockd/sockd.passwd:/home/danted/conf/sockd.passwd \\
    lozyme/sockd

添加 sockd的路由规则用于通过虚拟网段转发12.34或其他网段 (并设置好开机自启)

MTU=$(docker exec ec_sj cat /sys/class/net/tun0/mtu)


docker exec sockd ip route add 12.34.1.0/24 via 172.18.0.2 mtu $MTU table 2
docker exec sockd ip route add 192.168.200.0/24 via 172.18.0.2 mtu $MTU table 2
docker exec sockd ip rule add iif lo table 2

docker exec sockd ip route add 12.34.120.0/24 via 172.18.0.3 mtu $MTU table 3
docker exec sockd ip rule add iif lo table 3

docker exec sockd ip route add 12.34.220.0/24 via 172.18.0.4 mtu $MTU table 4
docker exec sockd ip rule add iif lo table 4

docker exec sockd ip route add 12.34.150.0/24 via 172.18.0.5 mtu $MTU table 5
docker exec sockd ip rule add iif lo table 5

#宿主机跳sockd 0.255是广播地址 因为是手动创建的网卡设备所以广播地址没用
ip route add 12.34.0.0/16 via 172.18.0.255 mtu $MTU table 2
ip route add 192.168.200.0/24 via 172.18.0.255 mtu $MTU table 2
ip rule add iif lo table 2

https://github.com/Lozy/danted

[Show] $docker exec sockd script/pam show

[Add/Modify] $docker exec sockd script/pam add USER PASSWORD

[Delete] $docker exec sockd script/pam del USER

现在容器sockd里代理网段为:

12.34.1.0/24 、12.34.120.0/24、12.34.220.0/24、12.34.150.0/24

让宿主机代理这2个网段下一条到sockd容器:

12.34.0.0/16、192.168.200.0/24

Windows设备直接使用上面的Proxfier工具配置好Socks5代理(上面sockd的账号的 IP端口)和规则即可

现在想为某台服务器设备能使用sockd的socks5端口做全局代理?继续往下看。。。

为某台Linux机器通过SOCKS接入全局代理

创建一个名称为 easy0 的 tun 接口

mode tun表示创建一个TUN类型的接口,如果只执行ip tuntap add mode tun命令而没有指定具体的设备名称(例如dev easy0),则系统会自动分配一个默认的设备名称,通常以tun或者tap开头,后面跟着一个数字编号,例如tun0 ip tuntap add mode tun dev easy0

扩展知识:

可以使用以下命令来查看已创建的虚拟设备列表:

ip link show

执行此命令后,将列出当前系统中的所有网络接口。如果您的系统上存在名为 easy0 的虚拟设备,则应该可以在输出结果中找到它。可以使用以下命令过滤出只显示名为 easy0 的虚拟设备:

ip link show easy0

执行此命令后,输出结果中应该只包含名为 easy0 的虚拟设备。您还可以使用以下命令查看特定设备的详细信息: ip addr show easy0

此命令将显示设备的IP地址、MAC地址和其他相关信息。如果您想要查看设备的路由信息,可以使用以下命令:

ip route show dev easy0

使用这个命令,您可以查看与 easy0 设备关联的路由信息,例如目标子网和网关。

给 easy0 分配 ip网段,不与本地网段冲突即可

ip addr add 172.233.0.0/16 dev easy0

ip addr show easy0
34: easy0: <POINTOPOINT,MULTICAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 500
    link/none 
    inet 172.233.0.0/16 scope global easy0
       valid_lft forever preferred_lft forever

把接口 up ,即启用该接口

ip link set dev easy0 up

ip addr show easy0
34: easy0: <NO-CARRIER,POINTOPOINT,MULTICAST,NOARP,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 500
    link/none 
    inet 172.233.0.0/16 scope global easy0
       valid_lft forever preferred_lft forever

在Linux系统中,网络接口默认情况下是处于 "down" 状态,即未启用状态。当需要使用某个接口时,需要先将其设置为 "up" 状态。执行ip link set dev tun0 up命令后,系统会检查该接口的相关配置,比如IP地址、子网掩码、MTU等信息,确保其能够正常工作。但是这并不意味着该接口能立即进行数据传输和接收,其是否能正常工作还需要进一步验证。

tun2socks 绑定到 easy0 接口并把接口流量转发到 10.0.0.1:1010

tun2socks -device easy0 -proxy socks5://10.0.0.1:1010 -interface ens160

这个 socks5 代理,ens160 是服务器本地主网卡。

-device easy0: 创建 TUN 类型的虚拟网络设备 easy0,并将所有传出的 TCP/IP 流量发送到该设备

-interface ens160: 指定原始输出接口为 ens160,即通过该接口发送和接收传入数据包。

如果需要在 tun2socks 命令中使用用户名和密码来连接 socks5 代理服务器,

可以使用以下格式:

tun2socks -device easy0 -proxy socks5://username:[email protected] -interface eth0

usernamepassword 替换为您的代理服务器所需的凭据。此命令将通过 easy0 设备将所有传出的TCP/IP流量转发到指定的 socks5 代理服务器(位于 192.168.11.230),同时将所有返回的流量路由回原始接口(即 eth0)。

12.34.0.0/16 这个网段走 easy0 接口设备

route add -net 12.34.0.0/16 dev easy0

route add -net 192.168.200.0/24 dev easy0

route add 命令将指定的网段(12.34.0.0/16)添加到指定的网络设备(easy0)中作为一个新的直连网络,而无需指定网关地址。这意味着所有属于该网段的数据包都将被发送到所指定的设备,而不会去寻找其他网关进行路由转发。

验证

ssh 访问成功即可

脚本整理

#以下操作并非持久化 需要在rc.local  开机自启执行脚本。
#创建一个名称为 easy0 的 tun 接口
ip tuntap add mode tun dev easy0
#给 easy0 分配 ip网段,不与本地网段冲突即可
ip addr add 172.233.0.0/16 dev easy0
#把接口 up ,即启用该接口
ip link set dev easy0 up
#tun2socks 绑定到 easy0 接口并把接口流量转发
nohup tun2socks -device easy0 -proxy socks5://username:[email protected]:1080 -interface eth0 > tun2socks.log 2>&1 &
#让 12.34.0.0/16 这个网段走 easy0 接口设备
#Centos
route add -net 12.34.0.0/16 dev easy0
route add -net 192.168.200.0/24 dev easy0

#Ubuntu
ip route add 12.34.0.0/16 dev easy0
ip route add 192.168.11.0/24 dev easy0
ip route add 192.168.10.0/24 dev easy0
ip route add 192.168.200.0/24 dev easy0
flowchart LR host[宿主机11.230创建多VPN容器和sockd二级代理] --> 1[VPN容器 12.34.1.0/24,192.168.200.0/24] --> |路由向上跳转|sockd host--> 220[VPN容器 12.34.220.0/24] --> |路由向上跳转|sockd host--> 120[VPN容器 12.34.120.0/24] --> |路由向上跳转|sockd host--> 150[VPN容器 12.34.150.0/24] --> |路由向上跳转|sockd host--> other[...更多VPN接入] --> |路由向上跳转|sockd host --> sockd[sockd docker二级代理分发账号\n10.34.0.0/16和192.168.200.0/24] sockd --> |tun接口代理SOCKS+路由|持续集成服务器 持续集成服务器 --> 向生产Linux发布 sockd -->|Proxifier|开发人员A --> 生产数据库A sockd -->|Proxifier|开发人员B --> 生产数据库A 开发人员B --> 生产数据库B sockd --> |tun接口代理SOCKS+路由| 测试环境 --> 生产数据库A 测试环境 --> 生产数据库B sockd --> |tun接口代理SOCKS+路由| 公司内nginx --> |域名代理转发|生产环境内网地址 测试环境 --> 生产数据库B