OpenVPNサーバ作成
特徴
作業
以下の手順では、「認証に共有キーを使い」「TCPベースでの接続」、「L2(tap0)のエミュレート」で接続可能なOpenVPNサーバを設定します。
本当は「tcp over tcp」の問題もあるので、UDPで接続した方がスループットは出ると思いますけど、TCP通信しか許可していない環境からの接続&VPN上での通信量があまり多くない事を考え、この方法を採用しました。
作業手順
必要なモジュールを読み込ませる(/etc/modules)
bridge ipv6 tun ip_tables iptable_filter ecb pcbc ppp_generic ppp_deflate ppp_async ppp_mppe ppp_synctty alias ppp-compress-18 ppp_mppe alias ppp-compress-21 bsd_comp alias ppp-compress-24 ppp_deflate alias ppp-compress-26 ppp_deflate
OpenVPNの設定で重要になるモジュールはppp_genericより上の物だと思います。
必要なソフトのインストール
sudo apt-get install openvpn bridge-utils
NICの設定ファイル(/etc/network/interfaces)の内容
auto lo iface lo inet loopback auto eth1 br0 iface eth1 inet static iface br0 inet static address 192.168.1.20 netmask 255.255.255.0 broadcast 192.168.1.255 network 192.168.1.0 gateway 192.168.1.1 bridge_ports eth1 tap0 pre-up /usr/sbin/openvpn --mktun --dev tap0 pre-up /sbin/ifconfig tap0 0.0.0.0 promisc up pre-up /sbin/ifconfig eth1 0.0.0.0 promisc up pre-up /usr/sbin/brctl addbr br0 pre-up /usr/sbin/brctl addif br0 eth1 pre-up /usr/sbin/brctl addif br0 tap0 pre-up /sbin/iptables -A INPUT -i tap0 -j ACCEPT pre-up /sbin/iptables -A INPUT -i br0 -j ACCEPT pre-up /sbin/iptables -A FORWARD -i br0 -j ACCEPT post-down /usr/sbin/brctl delif br0 tap0 post-down /usr/sbin/brctl delif br0 eth1 post-down /usr/sbin/brctl delbr br0 post-down /usr/sbin/openvpn --rmtun --dev tap0 post-down /sbin/ifconfig eth1 down
一番の山場です、sshなどネットワークログインしかない端末の場合、この設定に失敗するとログインできなくなってしまうので、段階を設定して少しずつ設定していった方が安全です。
- brctl addbr br0でブリッジが作成できるか
- openvpn --mktun --dev tap0でTAPデバイスが作成できるか
- iptablesが使えるか
- /etc/network/interfacesの編集
という感じに。
余談ですが、このbrctlとiptablesを組み合わせは、結構色々なことに使えて(iptables単独ではファイアウォールソフトですが)、brctl+iptables(nat設定)+dhcpd+ponなどを組み合わせると、3Gモバイルルータなどが作れるようになったりします。
OpenVPN設定ファイル(/etc/openvpn/server.conf)の内容
proto tcp-server port 11194 dev tap0 comp-lzo secret /etc/openvpn/key.openvpn ping 10 ping-restart 60 ping-timer-rem persist-key persist-tun verb 3
デバイスはtap0を作成したのでそれを指定します、TCP/11194で待ちうけ、共通鍵は後で作成する「/etc/openvpn/key.openvpn」を指定します。
再起動
ここまでできたら一旦再起動します。正常に動作しているなら、
ps ax | grep vpn 1071 ? Ss 0:00 /usr/sbin/openvpn --writepid /var/run/openvpn.server.pid --daemon ovpn-server --cd /etc/openvpn --config /etc/openvpn/server.conf netstat -tul tcp 0 0 *:11194 *:* LISTEN
TCP/11194番で待機しているプロセスが増えます。
# ifconfig br0 Link encap:イーサネット ハードウェアアドレス 00:1d:73:c0:ca:42 inetアドレス:192.168.1.20 ブロードキャスト:192.168.1.255 マスク:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1 RXパケット:2365 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:1732 エラー:0 損失:0 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:0 RXバイト:258713 (252.6 KiB) TXバイト:248626 (242.7 KiB) eth1 Link encap:イーサネット ハードウェアアドレス 00:1d:73:c0:ca:42 UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 メトリック:1 RXパケット:2367 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:1736 エラー:0 損失:0 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:532 RXバイト:297034 (290.0 KiB) TXバイト:249517 (243.6 KiB) 割り込み:15 lo Link encap:ローカルループバック inetアドレス:127.0.0.1 マスク:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 メトリック:1 RXパケット:18 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:18 エラー:0 損失:0 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:0 RXバイト:964 (964.0 B) TXバイト:964 (964.0 B) tap0 Link encap:イーサネット ハードウェアアドレス 00:ff:0f:b8:1a:a5 UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 メトリック:1 RXパケット:10 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:147 エラー:0 損失:333 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:100 RXバイト:1143 (1.1 KiB) TXバイト:25359 (24.7 KiB)
ifconfigが賑やかになってます。
ブロードバンドルータの設定
動作試験
公式サイトからインストーラを持ってきて、Windows番のOpenVPNをインストールします。
クライアント側には接続のための設定ファイルと、サーバ設定時に作成した共通鍵があることが必要です。クライアント側の設定ファイル(openvpn.ovpn)は以下の通りです。
proto tcp-client remote server-fqdn.com 11194 dev tap0 secret key.openvpn keepalive 10 120 comp-lzo tun-mtu 1400 persist-key persist-tun verb 3
この設定ファイルと共有キーをOpenVPNディレクトリの下にあるconfigディレクトリに置いておきます。その状態でタスクトレイのOpenVPNアイコンを使って接続すると、tapデバイスにローカル上のDHCPDからIPが割り当てられます。
ipconfig /all 〜〜略〜〜 Ethernet adapter ローカル エリア接続 3: Connection-specific DNS Suffix . : Description . . . . . . . . . . . : TAP-Win32 Adapter V8 Physical Address. . . . . . . . . : 00-FF-33-DE-D9-CD Dhcp Enabled. . . . . . . . . . . : Yes Autoconfiguration Enabled . . . . : Yes IP Address. . . . . . . . . . . . : 192.168.1.114 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.1.1 DHCP Server . . . . . . . . . . . : 192.168.1.1 DNS Servers . . . . . . . . . . . : 192.168.1.1 Lease Obtained. . . . . . . . . . : 2010年1月15日 6:54:29 Lease Expires . . . . . . . . . . : 2010年1月17日 6:54:29
この状態ならローカルのマシンからVPN上のホスト(192.168.1.114)へpingも通りますし、VPNホストからローカルLAN上のWindowsファイルサーバを見ることもできます。