wiki:TipAndDoc/network/vpn/openvpn

Version 8 (modified by mitty, 14 years ago) (diff)

--

HOWTO

dhcpd with openvpn bridge

設定ファイルについて

  • /etc/openvpn/*.conf がそれぞれ読み込まれる
    • /etc/init.d/openvpn
      (snip)
      
      CONFIG_DIR=/etc/openvpn
      
      (snip)
      
      case "$1" in
      start)
      
      (snip)
      
            for CONFIG in `cd $CONFIG_DIR; ls *.conf 2> /dev/null`; do
              NAME=${CONFIG%%.conf}
              start_vpn
            done
      

router mode

  • 基本的に#HOWTOの通りでよい

server side settings

  • sudo aptitude install -R openvpn
  • cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz .
  • vim server.conf
    • 適宜編集

各種鍵・証明書

  • #HOWTOで「自分でCA(認証局)を作り,OpenVPNサーバとクライアントのために証明書と鍵を生成する」となっているセクションは、代わりにssl?に従って作成する
    • rootCAを新しく作るのは管理が面倒になるため
    • Apache向けのSSL certを作るのとやり方は変わらない
  • rootCAのCA証明書とDHパラメータが、生成されないので、二つだけ個別に作る
    • openssl x509 -in demoCA/cacert.pem -out ca.crt
    • openssl dhparam -out dh1024.pem 1024
  • openssl.cnfに対する編集([3#file2])のため、Apache用SSL証明書と同様に作成した鍵・証明書を用いると、サーバ側で「VERIFY ERROR: depth=0, error=unsupported certificate purpose: 」というエラーになり接続が維持されない。

マスタCA証明書と鍵を生成する

  • sudo cp -av /usr/share/doc/openvpn/examples/easy-rsa/2.0/ /etc/openvpn/easy-rsa
  • sudo vim /etc/openvpn/easy-rsa/vars
  • sudo su -
  • /etc/openvpn/easy-rsa# . ./vars
  • /etc/openvpn/easy-rsa# ./clean-all
  • /etc/openvpn/easy-rsa# ./build-ca
    Country Name (2 letter code) [JP]:
    State or Province Name (full name) [Ibaraki]:
    Locality Name (eg, city) [Tsukuba]:
    Organization Name (eg, company) [mitty.jp]:OpenVPN CA
    Organizational Unit Name (eg, section) []:
    Common Name (eg, your name or your server's hostname) [mitty.jp CA]:OpenVPN CA
    Email Address [root (X) mitty.jp]:
    
  • /etc/openvpn/easy-rsa# ./build-key-server server
    Country Name (2 letter code) [JP]:
    State or Province Name (full name) [Ibaraki]:
    Locality Name (eg, city) [Tsukuba]:
    Organization Name (eg, company) [mitty.jp]:
    Organizational Unit Name (eg, section) []:OpenVPN Server
    Common Name (eg, your name or your server's hostname) [server]:server.mitty.jp
    Email Address [root (X) mitty.jp]:
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
    Check that the request matches the signature
    Signature ok
    The Subject's Distinguished Name is as follows
    countryName           :PRINTABLE:'JP'
    stateOrProvinceName   :PRINTABLE:'Ibaraki'
    localityName          :PRINTABLE:'Tsukuba'
    organizationName      :PRINTABLE:'mitty.jp'
    organizationalUnitName:PRINTABLE:'OpenVPN Server'
    commonName            :PRINTABLE:'server.mitty.jp'
    emailAddress          :IA5STRING:'root (X) mitty.jp'
    Certificate is to be certified until Nov 13 13:43:33 2019 GMT (3650 days)
    Sign the certificate? [y/n]:y
    
    
    1 out of 1 certificate requests certified, commit? [y/n]y
    Write out database with 1 new entries
    Data Base Updated
    
  • /etc/openvpn/easy-rsa# ./build-key client
    Country Name (2 letter code) [JP]:
    State or Province Name (full name) [Ibaraki]:
    Locality Name (eg, city) [Tsukuba]:
    Organization Name (eg, company) [mitty.jp]:
    Organizational Unit Name (eg, section) []:OpenVPN Client
    Common Name (eg, your name or your server's hostname) [client]:client.mitty.jp
    Email Address [root (X) mitty.jp]:
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
    Check that the request matches the signature
    Signature ok
    The Subject's Distinguished Name is as follows
    countryName           :PRINTABLE:'JP'
    stateOrProvinceName   :PRINTABLE:'Ibaraki'
    localityName          :PRINTABLE:'Tsukuba'
    organizationName      :PRINTABLE:'mitty.jp'
    organizationalUnitName:PRINTABLE:'OpenVPN Client'
    commonName            :PRINTABLE:'client.mitty.jp'
    emailAddress          :IA5STRING:'root (X) mitty.jp'
    Certificate is to be certified until Nov 13 13:44:25 2019 GMT (3650 days)
    Sign the certificate? [y/n]:y
    
    
    1 out of 1 certificate requests certified, commit? [y/n]y
    Write out database with 1 new entries
    Data Base Updated
    
  • /etc/openvpn/easy-rsa# ./build-dh
  • sudo ls -l /etc/openvpn/easy-rsa/keys/
    -rw-r--r-- 1 root root 3928 2009-11-15 22:43 01.pem
    -rw-r--r-- 1 root root 3810 2009-11-15 22:44 02.pem
    -rw-r--r-- 1 root root 1208 2009-11-15 22:42 ca.crt
    -rw------- 1 root root  887 2009-11-15 22:42 ca.key
    -rw-r--r-- 1 root root 3810 2009-11-15 22:44 client.crt
    -rw-r--r-- 1 root root  712 2009-11-15 22:44 client.csr
    -rw------- 1 root root  887 2009-11-15 22:44 client.key
    -rw-r--r-- 1 root root  245 2009-11-15 22:45 dh1024.pem
    -rw-r--r-- 1 root root  260 2009-11-15 22:44 index.txt
    -rw-r--r-- 1 root root   20 2009-11-15 22:44 index.txt.attr
    -rw-r--r-- 1 root root   21 2009-11-15 22:43 index.txt.attr.old
    -rw-r--r-- 1 root root  130 2009-11-15 22:43 index.txt.old
    -rw-r--r-- 1 root root    3 2009-11-15 22:44 serial
    -rw-r--r-- 1 root root    3 2009-11-15 22:43 serial.old
    -rw-r--r-- 1 root root 3928 2009-11-15 22:43 server.crt
    -rw-r--r-- 1 root root  712 2009-11-15 22:43 server.csr
    -rw------- 1 root root  887 2009-11-15 22:43 server.key
    
  • sudo mv ca.crt dh1024.pem server.* /etc/openvpn/
    ca.crt
    dh1024.pem
    server.conf
    server.crt
    server.key
    

デフォルトで出来るTUN

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:336 (336.0 B)  TX bytes:504 (504.0 B)

client side

  • serverと同様に各種鍵を作る。ca.crtはserverと同じ物を使用。
  • cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf .
  • vim client.conf
    • 適宜編集
  • sudo mv * /etc/openvpn/
    ca.crt
    client.conf
    client.crt
    client.key
    

デフォルトで出来るTUN

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.8.0.6  P-t-P:10.8.0.5  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

bridge mode

  • server側は物理NICとTAPデバイスのブリッジを造る必要がある。
    • sudo aptitude install -R bridge-utils
  • クライアント側はconfを編集してTUNをTAPに変更するのみ

bridge script

  • sudo cp bridge-start /etc/init.d/
  • sudo update-rc.d bridge-start start 99 S .
     Adding system startup for /etc/init.d/bridge-start ...
       /etc/rcS.d/S99bridge-start -> ../init.d/bridge-start
    
  • OS起動時に、networking -> bridge-start -> ufw の順でサービスが起動する

customize ufw

  • 以下の追加を忘れると、サーバ<->クライアント間でpingしか通らないので注意
    -A ufw-before-input -i tap0 -j ACCEPT
    -A ufw-before-input -i br0 -j ACCEPT
    -A ufw-before-forward -i br0 -j ACCEPT
    

push route

  • サーバ側の設定で以下のような設定があるが、単一サブネットに対してブリッジする際はこれは不要
    # Push routes to the client to allow it
    # to reach other private subnets behind
    # the server.  Remember that these
    # private subnets will also need
    # to know to route the OpenVPN client
    # address pool (10.8.0.0/255.255.255.0)
    # back to the OpenVPN server.
    ;push "route 192.168.10.0 255.255.255.0"
    
  • もしpushしてしまうと、クライアント側のルーティングテーブルに「192.168.10.0/24 via 192.168.10.254 dev tap0」の様なエントリが作成されてしまい、クライアント側で「BridgedLAN => WAN」のNATを構成してもWANからのreplyが正常にルートされなくなる。

misc

error on dhcp3-server

eth0とtap0をブリッジした場合、eth0がプロミスキャスモードでIPが振られなくなるため(ブリッジデバイスのbr0にIPが来る)、以下のようなエラーが出てdhcpdが起動しなくなる。

No subnet declaration for eth0 (0.0.0.0).
  • /etc/default/dhcp3-server を以下のように修正して回避する
    INTERFACES="br0"