DebianでOpenVPN
とりあえず書こう書こうと思っても書く気にならないので、終わらせる。
書かないで終わらせる。
Wikiを利用するので、そのうちここに置く。
http://tsuge.cuvel.com/wiki/doku.php?id=openvpn_for_debian%E3%81%AE%E4%B8%8B%E6%9B%B8%E3%81%8D
満足の行く出来になったらWitchGardenにあげるという流れにする。
細部は全然検証してないので、そこんとこよろしく・・。参考まで。
余計な設定がいくつか入ってるはず。
準備
とりあえずマシン買ってきて、DebianLinuxのネットワークインストール用CDイメージを落っことして、適当にインストール。
http://www.debian.org/CD/netinst/
最小構成でのインストールを推奨。
忘れたのでDebianのインストールメモは書かない。
パッケージインストール
Debianは強力なapt-getが使えるので、とりあえずapt-getでがんがんいれてしまう。
apt-get install openvpn apt-get install bridge-utils
依存関係のあるものも勝手に入る。lzoとか。多分。
ファイル作る
鍵はFreeBSDと同じ作り方なので、WitchGardenのここでも見て作る。
http://tsuge.astgate.biz/witchgarden/?ETC%20Tips%2fOpenVPN%20%2d%20Bridge%20Mode%20%2d
OpenWikiなので、ある日見たら壊れているかもしれない。そんときゃ、そんときで、がんばって。
多分Debianのeasy-rsaはここにある。
/usr/share/doc/openvpn/examples/easy-rsa
んで、こんな感じで配置する。鍵以外のものも配置する。
ディレクトリ | ファイル名 | user | group | パーミッション |
---|---|---|---|---|
/etc/openvpn/ | openvpn.conf | root | root | 644 |
/etc/openvpn/bin/ | up.sh | root(or openvpn) | root(or openvpn) | 755(or 750) |
/etc/openvpn/bin/ | down.sh | root(or openvpn) | root(or openvpn) | 755(or 750) |
/etc/openvpn/keys/ | ca.crt | root | root | 644 |
/etc/openvpn/keys/ | ca.key | root | root | 600 |
/etc/openvpn/keys/ | vpn.crt | root | root | 644 |
/etc/openvpn/keys/ | vpn.csr | root | root | 644 |
/etc/openvpn/keys/ | vpn.key | root | root | 600 |
/etc/openvpn/keys/ | dh1024.pem | root | root | 644 |
/etc/logrotate.d/ | openvpn | root | root | 644 |
/var/log/ | openvpn-status.log | root | root | 600 |
/var/log/ | openvpn.log | openvpn | openvpn | 660 |
あとはデフォルトであると思う・・。
ファイルの中身を作る
んで、ファイルの中身を書きまくる。ログファイルとかは作らなくていい。
/etc/openvpn/openvpn.conf
port 1194 proto tcp dev tap0 # keys ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/vpn.crt key /etc/openvpn/keys/vpn.key dh /etc/openvpn/keys/dh1024.pem # server address server-bridge 192.168.1.44 255.255.255.0 192.168.1.111 192.168.1.120 # client-to-client!! client-to-client # !test only! #duplicate-cn # exec user and group user openvpn group openvpn # keep alive (value is default) keepalive 10 120 # restart setting persist-key persist-tun # control script's up /etc/openvpn/bin/up.sh down /etc/openvpn/bin/down.sh # compress setting comp-lzo # message level status /var/log/openvpn-status.log log-append /var/log/openvpn.log verb 3
portの設定はudpでもいい。ルータの環境に合わせて。
後、実行ユーザをopenvpnにしているが、再起動にしくるので、OpenVPN再起動のフローがサーバ再起動を含まないようなら、ここを削除してrootのまま実行させるか、セキュリティをがっちりやりたいならシャットダウンスクリプト等を変更する必要あり。
この設定はサーバのIPが192.168.1.44、サブネットマスクは/24、192.168.1.111〜192.168.1.120がVPNクライアントのDHCPスコープ。
他は・・・読み取って下さい。すみません。
/etc/openvpn/bin/up.sh
検証してない。iptablesのDはdown.shが私の環境だと120%こけるので、up時に消すことにしているだけ。
でもdown時にも消してる。いや、あれだ、もう、決めの問題なんだけど。
#!/bin/bash echo 1 > /proc/sys/net/ipv4/ip_forward iptables -D INPUT -i tap0 -j ACCEPT iptables -D INPUT -i br0 -j ACCEPT iptables -D FORWARD -i br0 -j ACCEPT iptables -A INPUT -i tap0 -j ACCEPT iptables -A INPUT -i br0 -j ACCEPT iptables -A FORWARD -i br0 -j ACCEPT
/etc/openvpn/bin/down.sh
検証してない。っていうか、openvpnユーザだとiptablesはいじれないので、動かない。
#!/bin/bash #iptables -D INPUT -i tap0 -j ACCEPT #iptables -D INPUT -i br0 -j ACCEPT #iptables -D FORWARD -i br0 -j ACCEPT
/etc/logrotate.d/openvpn
postrotateで再起動するのがだるいが、仕方ない。
openvpnユーザでログを回しているので、この辺は環境に合わせて色々変える。
/var/log/openvpn.log { rotate 7 daily notifempty nomissingok compress create 0660 openvpn openvpn postrotate /etc/init.d/openvpn restart 2>&1 > /dev/null || true endscript }
/etc/network/interfaces
これ、一番大事。Debianだと楽なので、適当に調べつつやる。私は適当に調べつつやってたら、細かい内容を検証する暇がなくなって、この記事が今日まで延びた。
一番大事なのだが、一番設定内容はいい加減。多分、なんかいらんのがある。二重に設定しちゃってんのとかね。
IPやゲートウェイの設定は環境に合わせて色々変える。
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 auto eth0 iface eth0 inet static auto br0 iface br0 inet static address 192.168.1.44 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1 pre-up /usr/sbin/openvpn --mktun --dev tap0 pre-up /sbin/ifconfig tap0 0.0.0.0 promisc up pre-up /sbin/ifconfig eth0 0.0.0.0 promisc up pre-up /usr/sbin/brctl addbr br0 pre-up /usr/sbin/brctl addif br0 eth0 pre-up /usr/sbin/brctl addif br0 tap0 post-down /usr/sbin/brctl delif br0 eth0 post-down /usr/sbin/brctl delif br0 tap0 post-down /usr/sbin/brctl delbr br0 post-down /usr/sbin/openvpn --rmtun --dev tap0 post-down /sbin/ifconfig eth0 down
起動する
/etc/init.d/openvpnがなぜかあるので(apt-getで作られるだけだが。)、shutdown -r nowとかやってサーバを再起動してから、こんなことしてみる。
/etc/init.d/openvpn restart
成功したらおめでとう。
失敗したら・・まあなんつーか、がんばって。
おわりに
あとはサーバ再起動して、ちゃんと自動起動されるか確認して、VPNクライアントから接続してみて、翌日ログが回ってるか確認してみて、一週間くらいしてもう一回接続してみて、トラブル対応にSSH上から再起動とかしてみて、なんか、色々やって終わり。
VPNクライアントで接続出来ない場合は、まずルータの設定を疑うこと。はじめは同一LANから接続テストをするといい。
SSHの設定とかは書いてないので、この辺はがんばる。
起動スクリプトもsysctlも制御が不要だし、apt-getもあるので、FreeBSDよりは楽。
/etc/network/interfacesが個性を出しているが、これはDebianを触る以上避けて通れないので、がんばる。
以上。