1 需求功能 #
1.1 已实现 #
✅ 正常访问内网网页 ✅ 访问内网数据库 ✅ 远程控制内网计算机
1.2 未实现 #
❎ 可以和内网计算机上的程序通信
2 部署流程 #
2.1 安装docker #
直接按教程安装即可
2.2 部署docker-easyconnect #
2.2.1 教程 #
2.2.1.1 GitHub项目地址 #
https://github.com/docker-easyconnect/docker-easyconnect 主要用到“图形界面版 EasyConnect(x86、amd64、arm64、mips64el 架构)”
2.2.1.2 其他教程 #
2.2.2 终端输入命令 #
2.2.2.1 命令 #
docker run \
--rm \
--device /dev/net/tun \
--cap-add NET_ADMIN \
-ti \
-e PASSWORD=xxxx \
-e URLWIN=1 \
-e DISABLE_PKG_VERSION_XML=1 \
-v $HOME/.ecdata:/root \
-p 127.0.0.1:5901:5901 \
-p 127.0.0.1:1080:1080 \
-p 127.0.0.1:8888:8888 \
-p 127.0.0.1:54530:54530 \
--name easyconnect \
hagb/docker-easyconnect:7.6.7
⚠️ 如果有如下报错忽略即可:
2.2.2.2 参数逐项说明 #
- docker run
- 创建并启动容器实例
- –rm
- 运行容器后,容器执行完毕会自动删除
- 调试完成后,这个参数后期要删除
- –device /dev/net/tun
- 让容器可以直接使用宿主机上的 /dev/net/tun 设备
- 这在需要在容器中建立网络隧道时是必须的
- –cap-add NET_ADMIN
- 必须的
- 因为 VPN 要创建 tun 网络接口,为容器添加NET_ADMIN能力,这允许容器管理网络设置,例如设置IP地址、路由等
- -ti
- 这是两个参数 -t 和 -i 的组合
- 参数 -t 分配一个伪终端或终端,并且 -i 让容器的标准输入保持开启
- -e PASSWORD=xxxx
- 设置容器内的环境变量 PASSWORD 的值为 xxxx
- 使用VNC时要输入这个密码,可以自行设置自己常用的密码
- -e URLWIN=1
- 默认为空,此时当 VPN 前端想要调用浏览器时,不会弹窗,若该变量设为任何非空值,则会弹出一个包含链接的对话框供用户复制
- -e DISABLE_PKG_VERSION_XML=1
- arm64 和 mips64el 架构需要加入
- -v $HOME/.ecdata:/root
- 挂载宿主机的 $HOME/.ecdata 目录到容器的 /root 目录
- 这样,容器可以访问宿主机上的这个目录,并且任何在容器中对这个目录的修改都会反映到宿主机上
- –name easyconnect
- 指定容器名称,方便后续管理操作
- hagb/docker-easyconnect:7.6.7
- 指定使用的镜像名称与版本
2.2.2.3 端口映射参数 #
- -p 127.0.0.1:5901:5901:VNC桌面访问端口
- -p 127.0.0.1:1080:1080:Socks5代理服务端口
- -p 127.0.0.1:8888:8888:http代理服务端口
- -p 127.0.0.1:54530:54530:使用web访问VPN服务端口
2.2.3 登陆VPN #
打开VNC客户端,连接地址:127.0.1:5901,输入之前设置的密码即可登录VPN桌面
PS:用web登陆还没有成功
2.3 使用Proxifier将VPN流量转发到本地端口 #
2.3.1 添加Proxy #
- 点击“Add”添加一个新的Proxy
- 在弹出的窗口中设置如下参数:
- Address:127.0.0.1
- Proxy Type:选择“Socks5”
2.3.2 添加Rule #
需要添加两个Rule,用于避免容器网络和代理嵌套冲突和连接数据库、远程控制内网计算机、访问内网网页和使用公司邮箱
2.3.2.1 Local_Docker_Bypass #
- 配置
- Name: Local_Docker_Bypass
- Applications: 右下角“➕”号,选择docker程序
- Target Hosts: 127.0.0.*;host.docker.internal
- Target Ports: 不用填
- Action: 选择“Direct”
- 作用 让 Docker 进程访问本地回环和 Docker 内部地址时不走代理,避免容器网络和代理嵌套冲突
2.3.2.2 Selected_Apps_Use_Inner_Net #
- 配置
- Name: All_Inner_Net
- Applications: 不用填
- Target Hosts: 不用填
- Target Ports: 不用填
- Action: 选择“Proxy”,并选择之前添加的Socks5 Proxy“Proxy SOCKS5 127.0.0.1:1080”
- 作用
- 可控制特定应用程序访问内网资源时走代理,例如访问内网网页、连接内网数据库、远程控制内网计算机等
- 注意
- Target Hosts最好不要加限制,否则无法访问网站和邮箱
- 如果不加应用限制,可以不用这条Rule,直接把默认的 “Default” Rule的 Action改成之前添加的“Proxy SOCKS5 127.0.0.1:1080”
- 如果添加应用限制,必须把Proxifier添加到“Applications”里,否则无法访问内网资源
- 需要走代理的应用:
- 浏览器:Safari、Edge
- 数据库客户端:DBeaver
- 远程控制软件:Windows App
- 邮箱客户端:Foxmail
- 编程工具:IntelliJ IDEA
- 添加Edge的时候要用如下写法,否则无法访问内网网页
- “Microsoft Edge.app”; “Microsoft Edge”; com.microsoft.edgemac; “Microsoft Edge Helper”; edge.microsoft.com
- 其中“Microsoft Edge Helper”; edge.microsoft.com是通过查看Proxifier的日志发现的
2.3.2.3 默认Rule #
默认生成的Rule不用管
- Localhost
- 作用:所有本地回环流量直连,避免本地服务被代理
- Default
- 作用:所有公网流量直连,不影响外网速度
2.3.2.4 Rule顺序 #
- Localhost(默认)
- Local_Docker_Bypass(自定义)
- All_Inner_Net(自定义)
- Default(默认)
2.3.3 设置DNS #
- 需要将Proxifier的DNS设置从默认的“Detect DNS settings automatically”改成“Resolve hostnames through proxy”
- 其他的DNS设置保持默认即可