openvpn 立てた

自宅サーバをせっせと構築してたんだけどヘアピンNATがついてないルータなのでグローバルIP自宅サーバにアクセスすることができずに自宅と外とでグローバルIPとローカルIPを使いわけるのがめんどうだなーということを考えてました。まぁ、主にIRCクライアントでめんどうだなーというぐらいなんですけどね。

で、常にローカルIPで接続できるように openvpn でも自宅サーバで立てるかと思い立ったわけです。ほかにも外から仕事用ノートPC (windows) へのリモートデスクトップを安全に行なえたり、常に自宅からの接続に見せかけてネットストーカーの目をごまかす等、いろいろ役に立ちますしね。

ということで、 Ubuntu 9.10 で openvpn の構築をしました。

構築環境

Ubuntu 9.10
openvpn 2.1_rc19
サーバIP 192.168.0.240
ルータIP 192.168.0.1

必要なパッケージのインストール

# apt-get install openvpn bridge-utils

証明書の作成

# cd /usr/share/doc/openvpn/examples/easy-rsa/2.0
# vi vars

export KEY_COUNTRY="JP"
export KEY_PROVINCE="Tokyo"
export KEY_CITY="Akihabara"
export KEY_ORG="Akihabara-dennogumi"
export KEY_EMAIL="yuta@lql.be"

# source ./vars
# ./clean-all
# ./build-ca
# ./build-dh

# ./build-key-server ubuntu
# ./build-key thinkpad

vars に必要な情報を入れておけば後で証明書作るときとかにエンター押してればいいだけで楽(サーバの証明書とか作るときにCA証明書に署名するかと聞かれるのでそこだけ y にする)
build-key-server でサーバ用の証明書と鍵を作成
build-key でクライアント用の証明書と鍵を作成、クライアント毎に作成しよう
ちなみに build-key-pass でパス付きのクライアント用の証明書と鍵を作成できる。

# mkdir /etc/openvpn/key
# cp keys/ca.crt /etc/openvpn/key/
# mv keys/dh1024.pem /etc/openvpn/key/
# mv keys/ubuntu.* /etc/openvpn/key/

サーバーコンフィグの作成

ルータのIPが192.168.0.1の環境の場合

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

port 1139
proto udp
dev tap0

ca /etc/openvpn/key/ca.crt
cert /etc/openvpn/key/ubuntu.crt
key /etc/openvpn/key/ubuntu.key  # This file should be kept secret
dh /etc/openvpn/key/dh1024.pem

ifconfig-pool-persist ipp.txt
server-bridge 192.168.0.1 255.255.255.0 192.168.0.241 192.168.0.249

push "redirect-gateway def1"
push "dhcp-option DNS 192.168.0.1"

keepalive 10 120
comp-lzo

user nobody
group nogroup

persist-key
persist-tun

status openvpn-status.log

log         /var/log/openvpn.log
log-append  /var/log/openvpn.log

verb 3

インターフェイスの設定

# vi /etc/network/interfaces

auto lo
iface lo inet loopback

auto br0
iface br0 inet static 
    address 192.168.0.240
    netmask 255.255.255.0
    network 192.168.0.0
    broadcast 192.168.0.255
    gateway 192.168.0.1
    bridge_ports eth0 tap0

# /etc/init.d/netwoking restart
# /etc/init.d/openvpn start
# ifconfig tap0 up ; brctl addif br0 tap0
# ifconfig tap0 0.0.0.0 promisc up
# ifconfig eth0 0.0.0.0 promisc up
# ifconfig

openvpn を立ち上げないと tap0 のインターフェイスが作成されないので openvpn を立ち上げた後に br0 とのブリッジの設定と promisc モードの追加を行う。ifconfig で tap0 が立ち上がっていることの確認と promisc モードになっているかの確認を行う

クライアントの設定

サーバからクライアント用の鍵と証明書それにCA証明書をコピーしておく

client
dev tap
proto udp
remote serverIP serverPort
resolv-retry infinite
nobind
persist-key
persist-tun
ca thinkpadca.crt
cert thinkpad.crt
key thinkpad.key
comp-lzo
verb 3

固定回線からは問題なくVPN入れるのになぜか emobile の回線からだとうまくいかない、、、。MTUのサイズかと思っていろいろ弄ってはみたんだけど一向にうまくいかない、、、。