美文网首页
使用dokcer创建openvpn服务端并x给客户端分配固定IP

使用dokcer创建openvpn服务端并x给客户端分配固定IP

作者: sdw4agl | 来源:发表于2022-05-08 09:39 被阅读0次

    一、docker-compose.yaml文件

    version: '2'
    services:
       openvpn:
         container_name: openvpn
         image: kylemanna/openvpn
         volumes:
          - "./data:/etc/openvpn"
         ports:
          - '1194:1194/udp'
         cap_add:
          - NET_ADMIN
         restart: always
         privileged: true
    

    二、配置openvpn

    mkdir data
    mkdir client
    # 把后面的 udp 改成自己的网址
    docker-compose run --rm openvpn ovpn_genconfig -u udp://aa.bbb.com
    # 生成密钥文件,随后根据提示输入密钥和CA名称
    docker-compose run --rm openvpn ovpn_initpki
    # 启动服务
    docker-compose up -d
    

    三、用户操作

    1、添加用户

    (1)、生成证书
    #生成一个叫test的用户,输入密钥
    docker-compose run --rm  openvpn easyrsa build-client-full test nopass
    # 如果生成的用户需要输入密码则把后面的nopass去掉,根据提示输入密钥和个人密码
    docker-compose run --rm  openvpn easyrsa build-client-full test
    
    (2)、导出test用户证书到client文件夹里
    docker-compose run --rm openvpn ovpn_getclient test > ./client/test.ovpn 
    

    2、删除用户

    #删除用户证书
    docker-compose run --rm openvpn easyrsa revoke user_name
    #更新证书数据库
    docker-compose run --rm openvpn easyrsa gen-crl update-db
    #重启openvpn容器
    docker-compose restart
    

    四、配置客户端固定IP

    1、修改服务端配置文件

    # 进入容器外挂目录下的data文件夹,修改openvpn.conf文件,添加如下代码
    client-config-dir ccd
    

    2、添加客户端配置文件

    # 进入容器外挂目录下的data/ccd文件夹
    vim user_name
    # 添加如下代码
    ifconfig-push 192.168.255.12 192.168.255.13
    # 前面是IP地址,后面是网关地址
    # 或者如下设置
    # ifconfig-push 192.168.255.11 192.168.255.12
    

    注意,上面的配置在客户端是Windows系统的时候,会报告如下错误:

    There is a problem in your selection of --ifconfig endpoints [local=10.8.0.8, remote=10.8.0.9].  The local and remote VPN endpoints cannot use the first or last address within a given 255.255.255.252 subnet.  This is a limitation of --dev tun when used with the TAP-WIN32 driver.  Try 'openvpn --show-valid-subnets' option for more info. 
    

    导致这个错误的原因是TAP-WIN32使用默认子网掩码255.255.255.252 因此一个网段之内只能有两个相邻IP,一个是网关,一个是子网设备。
    这个问题在Linux/macOS系统上是不存在的,这个是TAP-WIN32驱动的限制。
    因此,如果系统是Windows 并且使用TAP-WIN32驱动,那么配置的地址只能是如下情况:

    ifconfig-push 192.168.255.14 192.168.255.13
    # 前面是设备IP地址,后面是网关IP
    # 或者如下设置:
    # ifconfig-push 192.168.255.10 192.168.225.9
    

    windows系统客户端地址池如下所示:

    cc1ae9cc-cb97-4597-b285-13d6eb41547b.png

    优化改进

    为了减少工作量,方便快速配置,可以使用如下两个增添用户的脚本。
    OpenVPN 创建用户脚本:

    #!/bin/bash
    read -p "please your username: " NAME
    OVPN_DATA="openvpn-data"
    LOCALIP="IP"
    docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full $NAME nopass
    docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient $NAME > /data/openvpn/conf/"$NAME".ovpn
    #修改端口(可选)
    sed -i "s/$LOCALIP 1194/$LOCALIP 1194/g" /data/openvpn/conf/"$NAME".ovpn
    #压缩(可选)
    echo "comp-lzo" >> /data/openvpn/conf/"$NAME".ovpn
    docker restart openvpn
    echo "CA saved to /data/openvpn/conf/$NAME.ovpn"
    

    OpenVPN 删除用户脚本,基于docker,需要自行改造成docker-compose:

    #!/bin/bash
    read -p "Delete username: " DNAME
    OVPN_DATA="openvpn-data"
    docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa revoke $DNAME
    docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa gen-crl
    docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn rm -f /etc/openvpn/pki/reqs/"$DNAME".req
    docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn rm -f /etc/openvpn/pki/private/"$DNAME".key
    docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn rm -f /etc/openvpn/pki/issued/"$DNAME".crt
    #删除相关用户conf(可选)
    docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn rm -f /data/openvpn/conf/"$DNAME"
    docker restart openvpn
    echo "Deleted $DNAME"
    

    引用链接:
    1、https://openvpn.net/community-resources/configuring-client-specific-rules-and-access-policies/

    相关文章

      网友评论

          本文标题:使用dokcer创建openvpn服务端并x给客户端分配固定IP

          本文链接:https://www.haomeiwen.com/subject/jczfurtx.html