【VPNサーバ】OpenVPN導入その2

鍵の作成が終わったので、次に設定ファイルを作成、修正していきます。

  • パケット転送設定
    下記2ファイルを修正します。

    vi /etc/sysctl.conf
    
    下記コメントアウトを外す。
    #net.ipv4.ip_forward=1
    ↓
    net.ipv4.ip_forward=1
    

    viじゃなぜか編集できなかったので、リダイレクトで設定変更。

    echo 1 > /proc/sys/net/ipv4/ip_forward
    
  • サーバー設定ファイル

    vi /etc/openvpn/server.conf
    
    下記内容を追加
    # tunデバイス、udpプロトコル、1194番ポートを利用
    dev tun
    proto udp
    port 1194
    
    # 認証局証明書、サーバー証明書、サーバー秘密鍵、鍵交換用のパス設定
    ca /etc/openvpn/ca.crt
    cert /etc/openvpn/サーバー名.crt
    key /etc/openvpn/サーバー名.key
    dh /etc/openvpn/dh1024.pem
    
    # OpenVPNの実行権限(OpenVPNインストール時に作成されるユーザとグループ)
    user nobody
    group nogroup
    
    # OpenVPNの仮想ネットワークと仮想サブネットマスク
    server 10.8.0.0 255.255.255.0
    
    # 起動時に鍵読み込み、tunデバイスオープン
    persist-key
    persist-tun
    
    # OpenVPNのログ設定
    status /var/log/openvpn-status.log
    log-append /var/log/openvpn
    verb 3
    
    # OpenVPNクライアント間の接続許可
    client-to-client
    
    # OpenVPNクライアント側の全てのトラフィックをOpenVPNサーバー経由(デフォルトゲートウェイ:10.8.0.2)
    # 「route -n」で確認可能
    push "redirect-gateway def1"
    
    # DHCP設定(DHCP利用しないため、詳細不明)
    push "dhcp-option DNS 8.8.8.8"
    push "dhcp-option DNS 8.8.4.4"
    
    # LZO圧縮を利用
    comp-lzo
    
    # OpenVPNクライアントのIP固定設定を利用
    client-config-dir ccd
    
    # 共有鍵の利用
    #tls-auth ta.key 0
    

    下記サイトを参考にしました。
    英語サイトですが、コマンドは一緒なので雰囲気で。
    http://raspberrypihelp.net/tutorials/1-openvpn-server-tutorial

  • サーバー設定ファイル(注意点1)
    pushを「”」で括っていますが、色々な参考サイトを見ていると、
    「”」(全角のダブルクォーテーション)になっているサイトがありますが、
    正しくは「”」(半角のダブルクォーテーション)です。

    クライアントはWindowsとiPhoneでそれぞれ試したところ、
    WindowsはどちらでもOpenVPNに接続成功しますが、
    iPhoneでは「”」(半角のダブルクォーテーション)でないとエラーになりました。

    全く同事象でエラーとなっていた人がいました。
    https://forums.openvpn.net/topic12789.html

  • サーバー設定ファイル(注意点2)
    「tls-auth ta.key 0」はコメントアウトしています。
    前回も記載していますが、有効になっているとiPhoneからの接続が出来なかったためです。
  • クライアントの仮想IP固定設定
    VPNクライアントの仮想IPは固定が推奨らしいので、設定を行います。

    mkdir /etc/openvpn/ccd
    vi /etc/openvpn/ccd/クライアント名
    
    下記内容を追加
    ifconfig-push 10.8.0.X 10.8.0.X+1
    

    Xは決まった数値がありますが、他のサイトを参考にしてください。

  • OpenVPN起動

    /etc/init.d/openvpn start
    

    エラーが発生する場合、下記のログを確認します。

    view /var/log/openvpn
    

    私のRaspberry Piでは下記の内容が出力されていました。

    Note: Cannot open TUN/TAP dev /dev/net/tun: No such device (errno=19)
    

    下記サイトを確認するとrebootが有効とのことで、
    再起動後にコマンドを実行してみたところ、無事起動しました。

    http://blog.paulregan.co.uk/2013/02/raspberry-pi-openvpn.html

  • ファイアウォール設定
    ファイルウォールの設定を行います。
    私のRaspberry Piはiptablesのラッパー的な役割をするufwを導入しているため、
    iptablesだけではなく、ufwの設定も行います。

    • iptablesの設定

      iptables -t filter -A INPUT -i eth0 -p udp -m udp --dport 1194 -j ACCEPT
      iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to 192.168.XXX.XXX
      

      「–to」にはRaspberry Piの通常のIPを指定します。
      再起動すると設定が消えるため、自動設定できるようにするのが良いです。
      (ここでは記載省略)

    • ufwの設定

      ufw allow 1194
      vi /etc/ufw/before.rules
      
      下記内容を「# End required lines」と「# allow all on loopback」の間に追加
      # OpenVPN Configuration
      -A ufw-before-input -i tun+ -j ACCEPT
      -A ufw-before-output -i tun+ -j ACCEPT
      -A ufw-before-forward -s 10.8.0.0/24 -j ACCEPT
      -A ufw-before-forward -d 10.8.0.0/24 -j ACCEPT
      
      ufw disable
      ufw enable