使用中转服务器Nginx+容器化EasyConnect实现校内网端口映射

参考Github上的开源项目Hagb/docker-easyconnect,实现外网访问自己服务器上的域名:特定端口来访问校内网特定内容,配合nginx的stream模块,可以完成任意端口任意协议的转发。

  1. 从 Docker Hub 上直接pull下来容器化的EasyConnect:
    docker pull hagb/docker-easyconnect:latest
    此容器带vnc服务,因为目前easyconnect的启动必须以图形界面方式。启动时需要vnc远程连接它的图形界面点击登录。

  2. 配置启动脚本,这里的端口映射可以自己调,要注意的是,本机上的端口还要通过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
  3. 启动并进入容器进行配置
    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 容器名 镜像名

  4. 在宿主机上配置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

  5. kill掉容器,重新用脚本启动,建议把脚本启动的镜像修改为自己的commit分支

  6. 使用VNC Viewer连接vnc远程桌面 域名或ip地址:5901 ,vnc密码为脚本中设置的密码-e PASSWORD=xxxx,随后登录Easyconnect即可

发表回复