OpenVPN を使ってLAN同士を繋ぐ、いわゆる拠点間VPNを作る。やり方を忘れないためのメモエントリー。
拠点間VPNなので、
- Point-to-pointで張り、通すプロトコルはIPだけでいいので、TUNデバイスを使う。
- 前に作ったオレオレ認証局 で公開鍵認証を行う。
- 拠点甲(サーバ側)のネットワークは 192.168.1.0/24
- 拠点乙(クライアント側)のネットワークは 192.168.2.0/24
- POINTOPOINT で使うIPアドレスは 192.168.100.1 & 2
拠点甲
接続を待ち受ける側。
まず、証明書を作る。それぞれ server.crt と server.key
tls-server proto udp port 5000 dev tun comp-lzo dh /etc/ssl/dh2048.pem ca /etc/ssl/cacert.pem cert server.crt key server.key ifconfig 192.168.100.1 192.168.100.2 route 192.168.2.0 255.255.255.0 push "ifconfig 192.168.100.2 192.168.100.1" push "route 192.168.1.0 255.255.255.0" keepalive 10 60 ping-timer-rem persist-key persist-tun user openvpn group openvpn verb 3 mute 10
ポイント:
- tls-server — TLSサーバ
- dev tun — TUNデバイス (Point-to-point) を使用
- ifconfig — ローカルとピアのIPアドレスを設定
- route — ルーティングの作成 (ip route add 192.168.2.0/24 via 192.168.100.2 と同じ)
- push — 拠点乙のIPアドレス・ルーティング設定をここで書く。乙は pull で呼び出す。
あとは起動
# /etc/init.d/openvpn start
拠点乙
甲に接続する側。
こちらも証明書を作る。CSRと鍵の生成は必ず証明書を使うマシンで行う。こうすることで鍵ファイルを受け渡さなくて済む。あと、甲のCA証明書 (cacert.pem) をコピーして、/etc/openvpn/cacert.pem に保存。
tls-client remote *****.tietew.jp proto udp port 5000 dev tun comp-lzo nobind pull dh /etc/ssl/dh2048.pem ca cacert.pem cert client.crt key client.key keepalive 10 60 ping-timer-rem persist-tun persist-key user openvpn group openvpn verb 3 mute 10
ポイント:
- tls-client — TLSクライアント
- remote — 接続先(拠点甲)
- nobind — UDPポートをbindしない。
- pull — サーバ側の push を受け取る。これでIPアドレスやルーティングを設定できる。
こんな感じになっていればオッケー(これは甲のほう)
# ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.100.1 P-t-P:192.168.100.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:635290 errors:0 dropped:0 overruns:0 frame:0
TX packets:1218418 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:26877015 (25.6 MiB) TX bytes:1134325226 (1.0 GiB)
いつも思うけどPOINTOPOINTという単語が謎。