ネットワーク構成

  • サーバ側ネットワーク(192.168.1.0)
    ルータ192.168.1.1
    VPNサーバ192.168.1.2
    アプリケーションサーバ1192.168.1.3
    アプリケーションサーバ2192.168.1.4
  • サーバ/クライアント間用仮想ネットワーク(10.8.0.0)
  • クライアント側ネットワーク(192.168.0.0)
  • サーバ側ネットワークとクライアント側ネットワークは異なるゾーンである必要がある。

スタティックルーティング

  • VPNサーバ単体とだけ接続できれば良い場合は、設定の必要なし。
  • ルータ下の複数のPCに接続する場合は、ルータにスタティックルーティングを設定する必要あり。
  • クライアントからアプリケーションサーバにアクセスしているとき、アプリケーションサーバでは 10.8.0.x からアクセスされているように見える。戻りパケットを 10.8.0.x に投げるので、10.8.0.0 用のゲートウェイ設定が無いとクライアントに応答が返ってこない。
  • 10.8.0.0 宛てのパケットのゲートウェイとして VPN サーバのローカルアドレスを設定する。
    • any net 10.8.0.0 netmask 255.255.255.0 gw 192.168.1.2

ファイアウォール

  • UDP:1194 を開放し、192.168.1.2 にポート転送する。

仮想NIC

  • VPNサーバにネットワークI/Fが1つだけしか無く、グローバルIP用として使われていて、ローカルネットが存在しない場合は、VPNサーバに仮想NICを追加する。
  • /etc/sysconfig/network-scripts/ifcfg-eth0:0
    DEVICE="eth0:0"
    IPADDR=192.168.1.2
    PREFIX=24
    ONBOOT=yes
    BOOTPROTO=none

インストール

# yum install openvpn (epelリポジトリ)
# cd /etc/openvpn/
# curl -LO https://github.com/OpenVPN/easy-rsa/archive/master.zip
# unzip master.zip
# mv easy-rsa-master/easyrsa3/ .
# rm -rf easy-rsa-master/
# rm -f master.zip

サーバ設定

CA証明書・秘密鍵作成

# cd /etc/openvpn/easyrsa3/
# ./easyrsa init-pki (OpenVPNインストール後初回のみ実行する)
# ./easyrsa build-ca (PEM pass phrase, Common Name を入力)
# cp pki/ca.crt /etc/openvpn/

サーバー証明書・秘密鍵作成

# ./easyrsa build-server-full server nopass (CAのパスフレーズを入力)
# cp pki/issued/server.crt /etc/openvpn/
# cp pki/private/server.key /etc/openvpn/

Diffie Hellman パラメータ作成

# ./easyrsa gen-dh
# cp pki/dh.pem /etc/openvpn/

証明書廃止リスト作成

# ./easyrsa build-client-full dmy nopass (CAのパスフレーズを入力)
# ./easyrsa revoke dmy (yes応答, CAのパスフレーズを入力)
# ./easyrsa gen-crl (CAのパスフレーズを入力)
# cp /etc/openvpn/easyrsa3/pki/crl.pem /etc/openvpn/
# chmod o+r /etc/openvpn/crl.pem

OpenVPN設定

# openvpn --genkey --secret /etc/openvpn/ta.key
# cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/
  • /etc/openvpn/server.conf
    port 1194
    
    proto udp
    
    dev tun
    
    ;dh dh2048.pem
    dh dh.pem
    
    server 10.8.0.0 255.255.255.0
    
    push "route 192.168.1.0 255.255.255.0"
    
    ;tls-auth ta.key 0
    tls-auth ta.key 0
    
    ;cipher BF-CBC        # Blowfish (default)
    cipher AES-256-CBC
    
    ;user nobody
    ;group nobody
    user nobody
    group nobody
    
    ;status openvpn-status.log
    status /var/log/openvpn-status.log
    
    ;log-append  openvpn.log
    log-append  /var/log/openvpn.log
    
    crl-verify crl.pem
  • /etc/openvpn/openvpn-startup
      0
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
    
    #!/bin/bash
     
    # VPNインタフェースiptablesルール削除スクリプト実行※必須
    /etc/openvpn/openvpn-shutdown
     
    # VPNサーバーからの送信を許可※必須
    iptables -I OUTPUT -o tun+ -j ACCEPT
    iptables -I FORWARD -o tun+ -j ACCEPT
     
    # VPNクライアントからVPNサーバーへのアクセスを許可する場合
    iptables -I INPUT -i tun+ -j ACCEPT
     
    # VPNクライアントからLANへのアクセスを許可する場合
    # (例としてVPNクライアントから192.168.1.0/24へのアクセスを許可する場合)
    # ※192.168.1.0/24側のファイアウォール等でVPNクライアント(10.8.0.0/24)からのアクセスを許可すること
    iptables -I FORWARD -i tun+ -d 192.168.1.0/24 -j ACCEPT
  • /etc/openvpn/openvpn-shutdown
      0
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
    
    #!/bin/bash
     
    # VPNインタフェース(tun+)用iptablesルール削除関数
    delete() {
        rule_number=`iptables -L $target --line-numbers -n -v|grep tun.|awk '{print $1}'|sort -r`
        for num in $rule_number
        do
            iptables -D $target $num
        done
    }
     
    # VPNインタフェース(tun+)用iptables受信ルール削除
    target='INPUT'
    delete
     
    # VPNインタフェース(tun+)用iptables転送ルール削除
    target='FORWARD'
    delete
     
    # VPNインタフェース(tun+)用iptables送信ルール削除
    target='OUTPUT'
    delete
  • /etc/logrotate.d/openvpn
    /var/log/openvpn.log {
        missingok
        notifempty
        sharedscripts
        postrotate
            systemctl restart openvpn 2>&1 > /dev/null || true
        endscript
    }
  • /etc/rc.d/init.d/openvpn (コメントを解除)
            #echo 1 > /proc/sys/net/ipv4/ip_forward
            echo 1 > /proc/sys/net/ipv4/ip_forward

クライアント用設定

クライアント証明書・秘密鍵作成

# cd /etc/openvpn/easyrsa3/
# ./easyrsa build-client-full client1 (client1用のパスフレーズ, CAのパスフレーズを入力)

クライアント設定ファイル

  • ファイルをクライアントマシンに転送。
    • /etc/openvpn/ca.crt
    • /etc/openvpn/ta.key
    • /etc/openvpn/easyrsa3/pki/issued/client1.crt
    • /etc/openvpn/easyrsa3/pki/private/client1.key
    • /usr/share/doc/openvpn-*/sample/sample-config-files/client.conf
  • C:/Program Files/OpenVPN/config 以下に上記ファイルを配置。

クライアント設定

  • client.conf を client.ovpn にリネーム。
  • C:/Program Files/OpenVPN/config/client.ovpn
    # OpenVPN サーバ名とポート
    remote vpn.takeash.net 1194
    
    ca ca.crt
    cert client1.crt
    key client1.key
    
    remote-cert-tls server
    
    ;tls-auth ta.key 1
    tls-auth ta.key 1
    
    ;cipher x
    cipher AES-256-CBC

複数拠点に同時接続

  • 同時接続する拠点分の TAP Windows Adapter が必要。
  • Adapter を追加するには、「プログラム / TAP-Windows / Utilities / Add a new TAP virtual ethernet adapter」を右クリックし「管理者として実行」を選択する。
    "C:\Program Files\TAP-Windows\bin\tapinstall.exe" install "C:\Program Files\TAP-Windows\driver\OemVista.inf" tap0901

リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Tue, 18 Apr 2017 10:21:14 JST (97d)