[[PageOutline]] = HOWTO = * [http://freescitech.net/2/wiki/index.php?OpenVPN%202%20HOWTO%20%E6%97%A5%E6%9C%AC%E8%AA%9E%E8%A8%B3 OpenVPN 2 HOWTO 日本語訳 - OpenVPN Japanese Information (wiki)] * [http://freescitech.net/2/wiki/index.php?OpenVPN%202%20Ethernet%20Bridging%20%E6%97%A5%E6%9C%AC%E8%AA%9E%E8%A8%B3 OpenVPN 2 Ethernet Bridging 日本語訳 - OpenVPN Japanese Information (wiki)] * [http://www.masatom.in/pukiwiki/Network/VPN/OpenVPN%A4%C7SSL-VPN%B4%C4%B6%AD%A4%F2%B9%BD%C3%DB%A4%B9%A4%EB/ Network/VPN/OpenVPNでSSL-VPN環境を構築する - きのさいと] * [http://blog.cheki.net/archives/1558 CentOS5.3にOpenVPNを導入(ブリッジモード)] * VMware ESXi上でopenvpnをブリッジモードで起動させる場合、プロミスキャスモードを許可してあげる必要があります。 * [http://nai.homelinux.net/openvpn.html Kung Noi:OpenVPNでハブ直結] * [http://d.hatena.ne.jp/irasya/20100115/1263507325 OpenVPNサーバ作成 - 休日奮闘記] * bridge-startスクリプトを使わず、/etc/network/interfaces内でpre-up/post-downによってtap,brを制御 * [http://zzzmaestro.wordpress.com/2008/07/22/openvpn-bridging-two-networks/ OpenVPN – Bridging two net « Linux Blog] {{{ I found that the originial bridge-start script did not include the default gateway. Since I only use a single network card on my server, this is a necessary addition. }}} * NATの内側にOpenVPNサーバを作る場合、オリジナルのイーサネットブリッジ作成時スクリプトではデフォルトルートが設定されないため、そのままではWANに繋がらなくなることに注意 == dhcpd with openvpn bridge == * server.confにおいてserver-bridgeを使わずに、server側サブネット上に存在する既存のdhcpdを用いてIP address assignする * [http://www.linuxquestions.org/questions/linux-server-73/openvpn-dhcpd-ldap-791287/ (SOLVED) OpenVPN+dhcpd+ldap] * [http://openvpn.net/archive/openvpn-users/2005-03/msg00481.html (Openvpn-users) OpenVPN to filter out dhcp traffic?] * => [./purebridge] * openvpnの内部dhcpdを用いない場合の具体手順 = 設定ファイルについて = * /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証明書と鍵を生成する ==== * http://freescitech.net/2/wiki/?OpenVPN%202%20HOWTO%20%E6%97%A5%E6%9C%AC%E8%AA%9E%E8%A8%B3#abd6e0dc に従って作成する * 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 == * bridge-startはUbuntuではパッケージに含まれていないようなので、http://openvpn.net/index.php/open-source/downloads.html からDLすること。 * 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" }}}