openvpn之一(基础知识 及demo演示)


安装openvpn{(C/S)环境centos7}

#server和client端都要进行如下安装
    yum install epel* -y
    yum install openvpn easy-rsa -y

配置通过预共享密钥文件实现P2P加密传输

#由于P2P模式很少使用,基本都是用于测试网络之间是否支持openvpn通信

  S端:
    #生成密钥文件
    openvpn --genkey --secret /etc/openvpn/secret.key
    #启动openvpn(默认是udp1194端口),下面是tcp模式
    openvpn --ifconfig 192.168.0.1 192.168.0.2 --dev tun --secret /etc/openvpn/secret.key
    #openvpn --ifconfig 192.168.0.1 192.168.0.2 --dev tun --secret /etc/openvpn/secret.key --proto tcp-server

  C端:
    #拷贝服务端的密钥文件
    scp root@10.12.194.100:/etc/openvpn/secret.key /etc/openvpn/
    #启动openvpn
    openvpn --ifconfig 192.168.0.2 192.168.0.1 --dev tun --remote 10.12.194.100 --secret /etc/openvpn/secret.key
    #openvpn --ifconfig 192.168.0.2 192.168.0.1 --dev tun --remote 10.12.194.100 --secret /etc/openvpn/secret.key --proto tcp-client

  验证:
    #在C端    ping 192.168.0.1

openvpn server端配置文件参数解释

#使用那种协议,可选的有,udp tcp-server tcp-client
    proto udp  
    port 1194

#tun路由模式,tap桥模式,据说tun效率高于tap,但是tun只能转发IP数据,tap是二层可以封装任何协议,window下只有tap模式
    dev tun

#该参数能防止密码被缓存到内存中
    auth-nocache    

#openvpn网络模式,默认是net30:表示掩码30位,有地址浪费,还有P2P模式,当然还有subnet这是比较推荐的
    topology subnet

#push表示推送,即将配置推送给客户端,让客户端也使用subnet模式
    push "topology subnet"

#定义分配给客户端的IP段,服务端自己默认使用第一个可以地址
    server 172.16.0.0 255.255.255.0

#在openvpn重启时,再次连接的客户端将依然被分配和以前一样的IP地址
    #ipp.txt文件格式 "nanchang,172.16.0.22"  一行一个
    ifconfig-pool-persist /etc/openvpn/beihai/ipp.txt

#认证相关的信息
    ca /etc/openvpn/ca/pki/ca.crt
    cert /etc/openvpn/ca/pki/issued/beihai.crt
    key /etc/openvpn/beihai/pki/private/beihai.key
    #dh 是server必须要有的,客户端可以不要,它定义了如何进行密钥交换
    dh /etc/openvpn/beihai/pki/dh.pem
    ##防DDOS攻击,openvpn控制通道的tls握手进行保护,服务器端0,客户端1
    tls-auth /etc/openvpn/beihai/ta.key 0

#待openvpn初始化完成后,将其降级为nobody权限运行
    user nobody
    group nobody

    persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
    persist-tun #通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,否则网络连接会先linkdown然后linkup
    comp-lzo        #允许数据压缩,如果启用了客户端配置文件也需要有这项
    keepalive 5 20  #表示每隔5秒ping一下客户端/服务端,若是20秒内无响应,认为down,随即重启openvpn(强烈开启)
    max-clients 100 #最大客户端并发连接数量    

    push "dhcp-option DNS 8.8.8.8"  #指定客户端使用的主DNS
    push "dhcp-option DNS 8.8.4.4"  #指定客户端使用的备DNS
    client-to-client            #默认客户端间不能互访,开启客户端互访,tap模式会形成广播域,tun不会
    duplicate-cn                    #支持一个证书多个客户端登录使用,建议不启用

#开启对客户端进行细粒度控制(该目录需要手动创建,名字为客户端的证书辨识名)
    client-config-dir /etc/openvpn/beihai/ccd

#给自己本地添加一个到隧道的路由
    route 192.168.29.0 255.255.255.0

#推送一条路由信息给客户端
#推送路由,若是推送失败,需要检查server 是否设置正常,该故障我遇到过,设置ifconfig-pool了,发现推送失效
    push "route 192.168.11.0 255.255.255.0"

#重定向默认网关
为什么要重定向网关:vpn客户端是经常出差的,网络环境不安全,希望它将所有流量传到公司,经公司出口
    #其中包含的flags有"local autolocal def1 bypass-dhcp bypass-dns block-local ipv6 !ipv4"(多个标志之间用空格分隔),
    #推荐使用def1,它使用0.0.0.0/1和128.0.0.0/1而不是0.0.0.0/0来覆盖默认网关,即有新路由也保留原始默认网关,只是优先匹配而已
    #block-local 是表示当客户端拨入后,阻断其除与本地网关的访问外,本地的其他IP都不允许访问
    push "redirect-gateway def1 bypass-dhcp"

#记录日志,每次重新启动openvpn后追加原有的log信息
    log-append /var/log/openvpn.log

#日志记录级别,可选0-9,0只记录错误信息,4能记录普通的信息,5和6在连接出现问题时能帮助调试,9显示所有信息,甚至连包头等信息都显示(像tcpdump) 
    verb 3

#状态文件:定期(默认60s)把状态信息写到该文件,以便自己写程序计费或者进行其他操作(需要关闭selinux)
    status /var/log/openvpn-status.log

#相同信息的数量,如果连续出现 20 条相同的信息,将不记录到日志中。
    mute 20

CCD配置文件语法,CCD能对客户端进行细粒度控制

    ifconfig-push    :向客户端推送虚拟IP地址,它将会覆盖掉 --config-pool的动态分配地址
    local
    remote-netmask    :他们的设置相当于--config 选项,用于在客户端机器上远程执行vpn通道的配置
    push
    push-reset
    iroute  :用于从服务器向特定的客户端生成内部路由,不管客户端从哪里拨入,总是将某个特定子网从服务器路由到客户端,同时需要在服务器端使用--route指令添加该系统路由
    config

#事例
    cat /etc/openvpn/beihai/ccd/nanchang

ifconfig-push 172.16.0.88 255.255.255.0    #表示给客户端分配一个特定IP地址
push "redirect-gateway def1 bypass-dhcp"   #重定向默认网关

openvpn client端配置文件参数解释

#随机选择一个Server连接,否则按照顺序从上到下依次连接。该选项默认不启用。
    remote-random

#始终重新解析Server的IP地址(如果remote后面跟的是域名),保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址。这样无需人为重新启动,即可重新接入VPN。
    resolv-retry infinite

将openvpn配置成开机自启服务

第一:不能为服务器/客户端的证书添加密码

    #方法一:生成证书请求时,使用nopass参数,不指定密码
    ./easy-rsa gen-req nanchang nopass

    #方法二:若是已经指定了密码,请使用set-rsa-pass 取消密码(在证书生成目录进行操作)
    [root@ca nanchang]./easy-rsa set-rsa-pass nanchang nopass 

第二:配置守护程序的配置文件(以centos7为例)
    #查看安装时自带的守护程序配置文件(以centos7为例)
    [root@beihai nanchang]# rpm -ql openvpn | grep systemd
    /usr/lib/systemd/system/openvpn-client@.service
    /usr/lib/systemd/system/openvpn-server@.service
    /usr/lib/systemd/system/openvpn@.service
    /usr/share/doc/openvpn-2.4.6/README.systemd

    #服务器端(注意配置文件一定要是如下路径,如下名称哦)
    #注意,使用守护进程的方式,server.conf里面不要有status /var/log/openvpn.status,不然无法启动
    cat /etc/openvpn/server.conf
    systemctl -f enable openvpn@server.service
    systemctl start openvpn@server

    #客户端(注意配置文件一定要是如下路径,如下名称哦)
    cat /etc/openvpn/client.conf
    systemctl -f enable openvpn@client
    systemctl start openvpn@client

openvpn的管理接口使用

#开启方式:需要在服务器端的配置文件(/etc/openvpn/server.conf)中添加一行
    # 在服务器127.0.0.1上监听2300端口,后面是进入的密码保存路径,该文件第一行为密码(cat /etc/openvpn/management-pass)
    management 127.0.0.1 2300 /etc/openvpn/management-pass

#管理方式:
    telnet 127.0.0.1 2300
    #可以用help查看帮助,例如可以使用 "status" "kill nanchang"等
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/698.html
微信打赏微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2020/2/19作者: 辣条①号

现在在做什么? 接下来打算做什么? 你的目标什么? 期限还有多少? 进度如何?

暂无评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注