openvpnサーバーの作成

まずは、openvpnをapt-getでインストール

# apt-get install openvpn
# apt-get install bridge-utils

次に、ディレクトリを作成して、設定のひな型をcopyする。

# mkdir /etc/openvpn/easy-rsa/
# cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
# chown -R $USER /etc/openvpn/easy-rsa/

次に、設定のもとになる変数を設定する。下記のように/etc/openvpn/easy-rsa/varsの編集をする。

# diff -uN vars.orig vars
--- vars.orig   2012-02-06 17:20:08.601577257 +0900
+++ vars  2012-02-06 17:24:39.945593378 +0900
@@ -61,8 +61,8 @@
 # These are the default values for fields
 # which will be placed in the certificate.
 # Don't leave any of these fields blank.
-export KEY_COUNTRY="US"
-export KEY_PROVINCE="CA"
-export KEY_CITY="SanFrancisco"
-export KEY_ORG="Fort-Funston"
-export KEY_EMAIL="me@myhost.mydomain"
+export KEY_COUNTRY="JP"
+export KEY_PROVINCE="Tokyo"
+export KEY_CITY="Nakano"
+export KEY_ORG="kensuke.jp"
+export KEY_EMAIL="webmaster@kensuke.jp"

次のコマンドを実行して、鍵の作成などをする。

# cd /etc/openvpn/easy-rsa/
# source vars
# ./clean-all
# ./build-dh
# ./pkitool --initca
# ./pkitool --server server
# cd keys
# openvpn --genkey --secret ta.key
# cp server.crt server.key ca.crt dh1024.pem ta.key /etc/openvpn/

クライアント証明書を作成する。

# cd /etc/openvpn/easy-rsa/
# source vars
# ./pkitool client

以下のファイルをクライアントにcopyする。

/etc/openvpn/ca.crt
/etc/openvpn/easy-rsa/keys/client.crt
/etc/openvpn/easy-rsa/keys/client.key
/etc/openvpn/ta.key

 

次に、サーバー側の設定を行う。

まず、サンプルの設定を持ってくる。

# cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
# gzip -d /etc/openvpn/server.conf.gz

設定を下記のように編集する。

# diff -uN server.conf.orig server.conf --- server.conf.orig    2012-02-06 17:39:21.357571000 +0900 +++ server.conf 2012-02-06 17:47:49.665589992 +0900 @@ -23,6 +23,7 @@  # Which local IP address should OpenVPN  # listen on? (optional)  ;local a.b.c.d +local 192.168.1.12

 # Which TCP/UDP port should OpenVPN listen on?  # If you want to run multiple OpenVPN instances @@ -49,8 +50,10 @@  # On most systems, the VPN will not function  # unless you partially or fully disable  # the firewall for the TUN/TAP interface. -;dev tap -dev tun +dev tap +;dev tun +up "/etc/openvpn/up.sh br0" +down "/etc/openvpn/down.sh br0"

 # Windows needs the TAP-Win32 adapter name  # from the Network Connections panel if you @@ -93,7 +96,7 @@  # Each client will be able to reach the server  # on 10.8.0.1. Comment this line out if you are  # ethernet bridging. See the man page for more info. -server 10.8.0.0 255.255.255.0 +;server 10.8.0.0 255.255.255.0

 # Maintain a record of client <-> virtual IP address  # associations in this file.  If OpenVPN goes down or @@ -113,6 +116,7 @@  # to connecting clients.  Leave this line commented  # out unless you are ethernet bridging.  ;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100 +server-bridge 192.168.1.12 255.255.255.0 192.168.1.13 192.168.1.15

 # Configure server mode for ethernet bridging  # using a DHCP-proxy, where clients talk @@ -135,6 +139,7 @@  # back to the OpenVPN server.  ;push "route 192.168.10.0 255.255.255.0"  ;push "route 192.168.20.0 255.255.255.0" +push "route 192.168.1.0 255.255.255.0"

 # To assign specific IP addresses to specific  # clients or if a connecting client has a private @@ -194,6 +199,8 @@  # DNS servers provided by opendns.com.  ;push "dhcp-option DNS 208.67.222.222"  ;push "dhcp-option DNS 208.67.220.220" +push "dhcp-option DNS 192.168.1.242" +push "dhcp-option DOMAIN local.kensuke.jp"

 # Uncomment this directive to allow different  # clients to be able to "see" each other. @@ -261,6 +268,8 @@  # non-Windows systems.  ;user nobody  ;group nogroup +user nobody +group nogroup

 # The persist options will try to avoid  # accessing certain resources on restart

/etc/openvpn/up.sh: を作成する

# diff -uN /etc/openvpn/up.sh.orig /etc/openvpn/up.sh
--- /etc/openvpn/up.sh.orig 1970-01-01 09:00:00.000000000 +0900
+++ /etc/openvpn/up.sh  2012-02-06 17:50:50.297591398 +0900
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+BR=$1
+DEV=$2
+MTU=$3
+/sbin/ifconfig $DEV mtu $MTU promisc up
+/usr/sbin/brctl addif $BR $DEV
+

/etc/openvpn/down.sh: を作成する

# diff -uN /etc/openvpn/down.sh.orig /etc/openvpn/down.sh
--- /etc/openvpn/down.sh.orig   1970-01-01 09:00:00.000000000 +0900
+++ /etc/openvpn/down.sh   2012-02-06 17:51:52.261590430 +0900
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+BR=$1
+DEV=$2
+
+/usr/sbin/brctl delif $BR $DEV
+/sbin/ifconfig $DEV down
+

shを実行権限つける

# chmod 755 /etc/openvpn/down.sh
# chmod 755 /etc/openvpn/up.sh

編集が終わったら起動してみます。

# openvpn server.conf

 Initialization Sequence Completedが表示されたら正しく起動しています。

どうも、これだけだとうまくいかないので、br0を作成してみることにする。

# diff -uN interfaces.orig interfaces --- interfaces.orig     2012-02-06 15:17:30.664320644 +0900 +++ interfaces  2012-02-06 18:12:13.097591781 +0900 @@ -6,12 +6,18 @@  iface lo inet loopback

 # The primary network interface -auto eth0 +#auto eth0 +auto br0  #iface eth0 inet dhcp -iface eth0 inet static +#iface eth0 inet static +iface br0 inet static          address 192.168.1.11          netmask 255.255.255.0          network 192.168.1.0          broadcast 192.168.1.0          gateway 192.168.1.254 +  bridge_ports eth0

+iface eth0 inet manual +  up ip link set $IFACE up promisc on +  down ip link set $IFACE down promisc off

 

手動でopenvpn起動させて問題ないことを確認します。

またルーティングを有効にする必要があります

 # vi /etc/sysctl.conf net.ipv4.ip_forward=1 としましょう。再起動すると有効になります。  再起動せずに有効にするには

 # echo "1" > /proc/sys/net/ipv4/ip_forward

 

ポートフォワードの設定   外部ネットワークに直接接続されていない場合はルータ等でポートフォワードを設定する必要があります。  各ルータ等のドキュメントを参照して、udp/1194(上記設定の場合)をopenvpnサーバに転送するように設定しましょう

クライアント側の設定

 

http://openvpn.se/から最新版をダウンロードしてきてインストールします。

次にネットワークのプロパティを開いて、TAP-Win32 Adapter V8のデバイスで生成されたローカルエリア接続を探します。  見つかったらその接続の名前を「OpenVPN」等に変更します。この名前はあとでclient.ovpnで使用します。

client                      クライアントモードを指定します pull                        設定をサーバから取得することを意味します float                       IPアドレスが動的であることを示します dev tap0                    サーバのdev指定とあわせます dev-node OpenVPN            上で変更したTAP-Win32デバイスの接続名を指定 proto udp                   サーバのproto指定とあわせます ca ca.crt                   認証局の証明書ファイルパス cert myClient.crt           クライアントの証明書ファイル key myClient.key            クライアントの鍵ファイル remote vpn.server 1194      openvpnサーバのアドレスとポート番号を指定します

openvpn.jpにあるフリーのクライアントでも、接続ができました。

 

VICをopenvpnサーバーにしている場合

ESXiにひと手間

プロミスキャスモードの指定   VMware ESXiでは標準ではゲストOSのネットワークがプロミスキャスモードになることを許可していないため、ブリッジモードがうまく動作しません。  以下のようにして修正します。

  VICを起動します  Configurationタブを開き、Networking>Properties...>VM Network>Editと進みます  Securityタブを開いて、Promiscuous Modeにチェックをいれ、Acceptを指定してOKを押します。

 

以下のドキュメントを参考にしました。

https://help.ubuntu.com/10.04/serverguide/C/openvpn.html http://www.fujita-lab.com/pukiwiki/index.php?OpenVPN https://help.ubuntu.com/community/OpenVPN#Setting_up_the_Bridge