参考Github上的开源项目Hagb/docker-easyconnect,实现外网访问自己服务器上的域名:特定端口来访问校内网特定内容,配合nginx的stream模块,可以完成任意端口任意协议的转发。
-
从 Docker Hub 上直接pull下来容器化的EasyConnect:
docker pull hagb/docker-easyconnect:latest
此容器带vnc服务,因为目前easyconnect的启动必须以图形界面方式。启动时需要vnc远程连接它的图形界面点击登录。 -
配置启动脚本,这里的端口映射可以自己调,要注意的是,本机上的端口还要通过nginx再次进行转发,否则启动easyconnect之后外网将不可访问docker映射出来的端口
vim startEC.sh
#!/bin/bash docker run -d --device /dev/net/tun --cap-add NET_ADMIN -ti \ -e PASSWORD=xxxx \ -e NODANTED=1 \ -v $HOME/.ecdata:/root \ -p 15901:5901 \ -p 19000:80 \ -p 19001:9001 \ -p 19002:9002 \ -p 19003:9003 \ -p 19004:9004 \ -p 19005:9005 \ -p 19006:9006 \ -p 19007:9007 \ -p 19008:9008 \ hagb/docker-easyconnect
-
启动并进入容器进行配置
docker exec -it 容器名 bash
授予容器中tmp目录的权限以通过apt安装vim、nginx软件
chmod 777 /tmp -R
apt update&&apt install vim nginx -y
配置nginx随容器启动
vim /usr/local/bin/start-sangfor.sh
在第二行与第三行之间插入
nginx
之后可以配置容器内nginx进行校内网的端口转发了
退出容器并commit为镜像
exit
docker commit 容器名 镜像名
-
在宿主机上配置nginx,将docker映射的端口重新转发一遍
vim /etc/nginx/nginx.conf
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } #从这里加一个stream模块配置用来转发docker映射出来的端口 stream { server{ listen 5901; proxy_pass localhost:15901;#对应docker映射出来的端口 } server{ listen 9001; proxy_pass localhost:19001; } #诸如此类······ }
重新载入nginx使配置生效
nginx -s reload
-
kill掉容器,重新用脚本启动,建议把脚本启动的镜像修改为自己的commit分支
-
使用VNC Viewer连接vnc远程桌面 域名或ip地址:5901 ,vnc密码为脚本中设置的密码
-e PASSWORD=xxxx
,随后登录Easyconnect即可