天天看點

OpenVPN服務部署

環境準備

  • 作業系統:CentOS 7.8
  • OpenVPN server: 2.4.11
  • easy-rsa:3.0.8

1、安裝準備

1.1 系統優化

關閉selinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0           

修改系統參數:

cat /etc/sysctl.d/99-net.conf
# 二層的網橋在轉發包時也會被iptables的FORWARD規則所過濾
net.bridge.bridge-nf-call-arptables=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1

# 關閉嚴格校驗資料包的反向路徑,預設值1
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0

# 設定 conntrack 的上限
net.netfilter.nf_conntrack_max=1048576

# 端口最大的監聽隊列的長度
net.core.somaxconn=21644

# 打開ipv4資料包轉發
net.ipv4.ip_forward=1
# TCP FastOpen
# 0:關閉 ; 1:作為用戶端時使用 ; 2:作為伺服器端時使用 ; 3:無論作為用戶端還是伺服器端都使用
net.ipv4.tcp_fastopen=3
    
# 修改limits參數:
cat  /etc/security/limits.d/99-centos.conf
* - nproc 1048576
* - nofile 1048576
           

2、安裝openvpn

安裝epel源:
    yum -y install epel-* 

更新軟體:
    yum makecache
    yum update -y

安裝openvpn及easy-rsa:
    yum -y install openvpn easy-rsa
               

3、服務端證書配置

複制檔案:

# 拷貝easy-rsa的檔案到/etc/openvpn下
    cp -r /usr/share/easy-rsa/3.0.8 /etc/openvpn/easy-rsa
    cp /usr/share/doc/easy-rsa-3.0.8/vars.example /etc/openvpn/easy-rsa/vars           

修改/etc/openvpn/easy-rsa/vars配置:

set_var EASYRSA_REQ_COUNTRY     "CN"
set_var EASYRSA_REQ_PROVINCE    "Zhe Jiang"
set_var EASYRSA_REQ_CITY        "Hang Zhou"
set_var EASYRSA_REQ_ORG         "test"
set_var EASYRSA_REQ_EMAIL       "[email protected]"
set_var EASYRSA_REQ_OU          "openvpn"
set_var EASYRSA_KEY_SIZE        4096
set_var EASYRSA_ALGO            rsa
set_var EASYRSA_CA_EXPIRE       365000
set_var EASYRSA_CERT_EXPIRE     3650
set_var EASYRSA_CERT_RENEW      180
set_var EASYRSA_CRL_DAYS        60           

初始化PKI和CA

切換目錄:
  cd /etc/openvpn/easy-rsa
        
建立PKI
  ./easyrsa init-pki
        
建立CA
  ./easyrsa build-ca nopass

建立伺服器證書
        方式一:
            ./easyrsa build-server-full openvpn-server nopass    #自動簽發公鑰和私鑰

        方式二:
            ./easyrsa gen-req openvpn-server nopass    # 建立伺服器密鑰
            ./easyrsa sign-req server openvpn-server    # 用CA憑證簽署密鑰
        
建立用戶端證書
        方式一:
             ./easyrsa build-server-full openvpn-client nopass
           
       方式二:
         ./easyrsa gen-req openvpn-client nopass    # 建立伺服器密鑰
            ./easyrsa sign-req client openvpn-client    # 用CA憑證簽署密鑰
        
建立DH證書
         ./easyrsa gen-dh        # 根據在頂部建立的vars配置檔案生成密鑰
        
建立ta.key
      openvpn --genkey --secret /etc/openvpn/easy-rsa/ta.key
        
生成CRL密鑰:
      ./easyrsa  gen-crl           

拷貝證書

mkdir -p /etc/openvpn/pki
cp /etc/openvpn/easy-rsa/pki/ca.crt \
   /etc/openvpn/easy-rsa/pki/dh.pem \
   /etc/openvpn/easy-rsa/pki/issued/openvpn-server.crt \
   /etc/openvpn/easy-rsa/pki/private/openvpn-server.key \
   /etc/openvpn/pki/
ln -sv /etc/openvpn/easy-rsa/pki/crl.pem /etc/openvpn/pki/crl.pem
chown -R root:openvpn /etc/openvpn/pki
    
    
# 複制ca證書,ta.key和server端證書及密鑰到/etc/openvpn/server檔案夾裡
  cp -p /etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/server/
  cp -p /etc/openvpn/easy-rsa/pki/issued/openvpn-server.crt /etc/openvpn/server/
  cp -p /etc/openvpn/easy-rsa/pki/private/openvpn-server.key /etc/openvpn/server/
  cp -p /etc/openvpn/easy-rsa/ta.key /etc/openvpn/server/
  
# 複制ca證書,ta.key和client端證書及密鑰到/etc/openvpn/client檔案夾裡

  cp -p /etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/client/
  cp -p /etc/openvpn/easy-rsa/pki/issued/openvpn-client.crt /etc/openvpn/client/
  cp -p /etc/openvpn/easy-rsa/pki/private/openvpn-client.key /etc/openvpn/client/
  cp -p /etc/openvpn/easy-rsa/ta.key /etc/openvpn/client/
  
# 複制dh.pem , crl.pem到/etc/openvpn/client檔案夾裡
  cp /etc/openvpn/easy-rsa/pki/dh.pem /etc/openvpn/server/
  cp /etc/openvpn/easy-rsa/pki/crl.pem /etc/openvpn/server/
  cp /etc/openvpn/easy-rsa/pki/dh.pem /etc/openvpn/client/
  cp /etc/openvpn/easy-rsa/pki/crl.pem /etc/openvpn/client/           

4、OpenVPN服務端配置

檔案建立

建立日志目錄:
    mkdir -p /var/log/openvpn
    chown -R openvpn:openvpn /var/log/openvpn

建立用戶端配置目錄
    mkdir -p /etc/openvpn/client/{config,user}
    chown -R root:openvpn /etc/openvpn/client/{config,user}           

配置檔案建立

cp -p /usr/share/doc/openvpn-2.4.11/sample/sample-config-files/server.conf /etc/openvpn/server/
  cat /etc/openvpn/server/server.conf
    # 路徑根據實際情況修改,一般情況下服務啟動失敗都是因為證書的原因
    
    # 監聽位址
    #local 0.0.0.0
    # 監聽端口
    port 1194
    # 通信協定
    proto udp
    # TUN模式還是TAP模式
    dev tun
    # 證書
    ca         /etc/openvpn/pki/ca.crt
    cert       /etc/openvpn/pki/openvpn-server.crt
    key        /etc/openvpn/pki/openvpn-server.key
    dh         /etc/openvpn/pki/dh.pem
    crl-verify /etc/openvpn/pki/crl.pem
    # 禁用OpenVPN自定義緩沖區大小,由作業系統控制
    sndbuf 0
    rcvbuf 0
    # TLS rules “client” | “server”
    #remote-cert-tls  "client"
    # TLS認證
    tls-auth /etc/openvpn/pki/ta.key 0
    # TLS最小版本
    #tls-version-min "1.2"
    # 重新協商資料交換的key,預設3600
    #reneg-sec 3600
    # 在此檔案中維護用戶端與虛拟IP位址之間的關聯記錄
    # 如果OpenVPN重新開機,重新連接配接的用戶端可以被配置設定到先前配置設定的虛拟IP位址
    ifconfig-pool-persist /etc/openvpn/ipp.txt
    # 配置client配置檔案
    client-config-dir /etc/openvpn/client/config
    # 該網段為 open VPN 虛拟網卡網段,不要和内網網段沖突即可。
    server 10.7.0.0 255.0.0.0
    # 配置網橋模式,需要在OpenVPN服務添加啟動關閉腳本,将tap裝置橋接到實體網口
    # 假定内網位址為192.168.0.0/24,内網網關是192.168.0.1
    # 配置設定192.168.0.200-250給VPN使用
    #server-bridge 192.168.0.1 255.255.255.0 192.168.0.200 192.168.0.250
    # 給用戶端推送自定義路由
    #push "route 192.168.0.0 255.255.255.0"
    # 所有用戶端的預設網關都将重定向到VPN
    push "redirect-gateway def1 bypass-dhcp"  
    # 向用戶端推送DNS配置
    push "dhcp-option DNS 114.114.114.114"
    push "dhcp-option DNS 8.8.8.8"
    # 允許用戶端之間互相通路
    client-to-client
    # 限制最大用戶端數量
    max-clients 100
    # 用戶端連接配接時運作腳本
    #client-connect ovpns.script
    # 用戶端斷開連接配接時運作腳本
    #client-disconnect ovpns.script
    # 保持連接配接時間
    keepalive 20 120
    # 開啟vpn壓縮
    comp-lzo
    # 允許多人使用同一個證書連接配接VPN,不建議使用,注釋狀态
    duplicate-cn
    # 運作使用者
    user openvpn
    #運作組
    group openvpn
    # 持久化選項可以盡量避免通路那些在重新開機之後由于使用者權限降低而無法通路的某些資源
    persist-key
    persist-tun
    
    cipher AES-256-CBC
    compress lz4-v2
    push "compress lz4-v2"
    
    # 顯示目前的連接配接狀态
    status      /var/log/openvpn/openvpn-status.log
    # 日志路徑,不指定檔案路徑時輸出到控制台
    # log代表每次啟動時清空日志檔案
    # log        /var/log/openvpn/openvpn.log
    # log-append代表追加寫入到日志檔案
    log-append  /var/log/openvpn/openvpn.log
    # 日志級别
    verb 6
    # 忽略過多的重複資訊,相同類别的資訊隻有前20條會輸出到日志檔案中
    mute 20
    explicit-exit-notify 1           

5、防火牆配置

firewall-cmd --permanent --add-service=openvpn

firewall-cmd --permanent --add-interface=tun0    # vpn網卡名
firewall-cmd --permanent --add-masquerade
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s  10.7.0.0/8 -o ens33 -j MASQUERADE    # IP位址為vpn網卡監聽的網段,ens33指的是你伺服器上網的網卡名稱
firewall-cmd --reload           

6、服務端啟動

systemctl enable openvpn-server@server  # 開機啟動
    systemctl start openvpn-server@server   # 本次啟動
    systemctl status openvpn-server@server  # 檢視狀态
    netstat -tlunp | grep openvpn           

7、用戶端配置

# 複制配置檔案模闆
    cp -p /usr/share/doc/openvpn-2.4.11/sample/sample-config-files/client.conf /etc/openvpn/client/
# 修改後的内容如下
[root@localhost client]# cat client.conf |grep '^[^#|^;]'
    client
    dev tun
    proto udp
    remote 192.168.43.138 1194
    resolv-retry infinite
    nobind
    persist-key
    persist-tun
    ca ca.crt
    cert openvpn-client.crt
    key openvpn-client.key
    remote-cert-tls server
    tls-auth ta.key 1
    cipher AES-256-CBC
    verb 6
    
# 更改client.conf檔案名為client.ovpn
    mv /etc/openvpn/client/client.conf /etc/openvpn/client/client.ovpnmv client/client.conf client/client.ovpn

# 打包client檔案夾
[root@localhost openvpn]# tar -zcvf client.tar.gz client/

# 安裝lrzsz工具,通過sz指令把 client.tar.gz傳到客戶機上面
[root@localhost openvpn]# yum -y install lrzsz

# 将用戶端檔案複制到需要使用的機器上即可           

8、用戶端使用openvpn指令連接配接服務端

openvpn --daemon --cd /root/client/ --config client.ovpn --log-append /var/log/openvpn/openvpn-status.log --auth-nocache 

    --daemon:背景運作
    --cd:切換路徑
    --config: 指定配置檔案
    --log-append:指定日志
    --auth-nocache:自動認證           

繼續閱讀