Docker容器跑OpenVPN

作者: ziyouxia 发布时间: 2017-08-08 浏览: 6789 次 编辑

为节约服务器资源方便服务器迁移,可以将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

#!/bin/bash

iptables -F

iptables -X

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

iptables -P FORWARD ACCEPT

iptables -A INPUT -i lo -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A INPUT -p udp --dport 1194 -j ACCEPT

iptables -t nat -A POSTROUTING -o eth0 -s 10.8.0.0/24 -j MASQUERADE

cat supervisord.conf

1

2

3

4

5

6

7

8

[supervisord]

nodaemon=true

[program:iptables]

command=/iptables.sh

[program:openvpn]

command=/usr/local/openvpn2.3.14/sbin/openvpn --config /usr/local/openvpn2.3.14/conf/server.conf --daemon

本文出自 “枫林晚” 博客,请务必保留此出处http://fengwan.blog.51cto.com/508652/1896431