为节约服务器资源方便服务器迁移,可以将OpenVPN跑在Docker容器中,OpenVPN在容器中有相比其他有些特殊,主要有以下几点:
1.ip包转发问题
2.iptables在容器中的权限问题
3.容器对网卡设备的权限问题
环境:
CentOS 7.2 x86_64
Docker-1.13.1
selinux已关闭
1.ip包转发
修改/usr/lib/systemd/system/docker.service文件
ExecStart=/usr/bin/dockerd --ip-forward=true --iptables=true
增加红色部分,打开ip-forward及iptables
2.在启动容器时增加
docker run --cap-add NET_ADMIN --cap-add NET_RAW --device=/dev/net/tun -d -p 1194:1194/udp openvpn
使得容器有操作网卡的权限
这样就可以在Docker中跑OpenVPN
dockerfile
FROM centos RUN rm -rf /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && yum -y install python-setuptools && easy_install pip && pip install supervisor RUN yum -y install gcc make autoconf openssl-devel pam-devel lzo-devel iptables-services COPY openvpn-2.3.14.tar.gz . RUN tar zxf openvpn-2.3.14.tar.gz && cd openvpn-2.3.14 && ./configure --prefix=/usr/local/openvpn2.3.14 && make && make install && rm -rf ../openvpn-2.3.14 && rm -rf ../openvpn-2.3.14.tar.gz RUN mkdir /usr/local/openvpn2.3.14/logs COPY conf /usr/local/openvpn2.3.14/conf COPY iptables.sh /iptables.sh COPY supervisord.conf /etc/supervisord.conf CMD ["/usr/bin/supervisord"]
cat iptables.sh
1 2 3 4 5 6 7 8 9 10 11 |
|
cat supervisord.conf
1 2 3 4 5 6 7 8 |
|
本文出自 “枫林晚” 博客,请务必保留此出处http://fengwan.blog.51cto.com/508652/1896431