layout: post
title: 在docker容器中運行VPN,中宇萬通的TrustMore
由于一些緣故,不得不在服務(wù)器上運行中宇萬通的VPN.
觀察
首先中宇萬通給的VPN的目錄大概是這樣:
linux_client
linux_client_daemon
start-client.sh
啟動命令:
sh start-client.sh -addr <IP:PORT> -t 0 -u <UER_NAME> -p "<PASSWORD>"
仔細觀察下會發(fā)現(xiàn)這個VPN其實是先啟動linux_client
然后監(jiān)控8001
端口,在用iptables
把流量轉(zhuǎn)發(fā)到linux_client
程序上的,可以執(zhí)行iptables -L -n -t nat
查看
Chain TRUSTMORE (2 references)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 <HIDE> tcp dpt:443
REDIRECT tcp -- 0.0.0.0/0 <HIDE> tcp dpt:<HIDE> redir ports 8001
之后就可以訪問對方在VPN提供的服務(wù)器如:<target_ip>:<target_port>
.
但是這個服務(wù)只能在安裝了VPN的服務(wù)器上面訪問,而VPN有是單點登錄.
為此需要再啟動個nginx
來將對方的服務(wù)器暴露出來.
實踐
先寫個nginx.conf
配置,和VPN程序放在一起
worker_processes 4;
events {
use epoll;
worker_connections 65535;
}
stream {
server {
listen 996;
proxy_connect_timeout 10s;
proxy_timeout 60s;
proxy_pass <target_ip>:<target_port>;
}
}
讓我們來寫個Dockerfile
FROM centos:7
# 加入nginx源
RUN rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 安裝iptables,VPN是用iptables來轉(zhuǎn)發(fā)流量的
RUN yum install -y iptables
# 以及一堆依賴
RUN yum install -y net-tools pciutils dmidecode hdparm
# 然后自然是安裝nginx
RUN yum install -y nginx
RUN systemctl enable nginx
# 把VPN程序復(fù)制進容器
COPY . /vpn
WORKDIR vpn
RUN chmod +777 linux_client && chmod +777 start-client.sh
# 復(fù)制nginx配置
COPY nginx.conf /etc/nginx/nginx.conf
CMD nginx && exec sh start-client.sh -addr <VPN_IP:VPN_PORT> -t 0 -u <UER_NAME> -p "<PASSWORD>"
最后完整的目錄結(jié)構(gòu)就是這樣
Dockerfile
linux_client
linux_client_daemon
nginx.conf
start-client.sh
最后打包運行
docker build -t proxy-vpn .
docker run -it -p 996:996 proxy-vpn