IPsec – Openswan
Openswan は Cent OS 5.5 の標準レポジトリにパッケージがありますが、Version 2.6.21 ベースです。
ところが、このバージョンの Openswan の NAT-T(NATトラバーサル)にはバグがあるようで、NAT-T により IPsec の ESP プロトコルが over UDP でカプセリングされて IPsec が確立しても、その後の L2TP パケットは、そのまま 通そうとしてしまいます。 つまり、IPsec 接続しかできず、L2TP によるトンネリングが行えません。
xl2tpd 側で回避できればいいのですが、回避策は無いようでした。
Cent OS 6 がリリースされれば RHEL6 の Openswan は 2.6.24 ベースみたいなのでバグが解消されてると思いますが、Cent OS 5.x 系ではソースから入れるのが無難なようです。
tar ボールからのインストール
- VPS にログインする。
- 事前に Openswan の make に必要なライブラリをインストーする
# yum install gmp-devel
- 当然、gcc や glibc-devel は入っている前提で書いてます。
- http://www.openswan.org/code/ より最新版の Openswan の tar.gz を取得して、make する
$ wget http://www.openswan.org/download/openswan-2.6.32.tar.gz $ tar xzvf ./openswan-2.6.32.tar.gz $ cd openswan-2.6.32 $ make programs # make install
- make install で、/etc/ipsec.conf や /etc/ipsec.d/ 配下にサンプルなどが置かれます。
- L2TP/IPsec 設定のサンプルをコピーする
# cp /etc/ipsec.d/examples/l2tp-psk.conf /etc/ipsec.d
- サービス登録する。
# chkconfig --add ipsec
標準リポジトリからのインストール
※CentOS 5.x の Openswan Version 2.6.21 では、NAT-T による L2TP/IPsec が行えませんので、 残念ながら tar ボールからインストールしてください。 |
- VPS にログインする。
- Openswan をインストールする。
# yum -y install openswan
設定
IPsec – Openswan設定
- Openswan 自身に関する設定を行う。
# vi /etc/ipsec.conf config setup protostack=netkey virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12 listen=AAA.BBB.CCC.DDD include /etc/ipsec.d/*.conf
- protostack を auto にした場合は、netkey, klips, mast の中で使えるコードを調べてくれます。
- virtual_private は NATトラバーサル用の設定です。接続元の NAT 配下の IPレンジが含まれるようにします。
- listenは、 LISTEN する IPアドレスを指定する場合のみ、必要です。VPS のグローバル IP アドレスを指定します。
- include は、追加の設定を読み込むオプションです。
- L2TP/IPsec に関する設定を行う。標準リポジトリからインストールした場合は、/etc/ipsec.d/l2tp-psk.conf が無いので作成する。
# vi /etc/ipsec.d/l2tp-psk.conf conn L2TP-PSK-NAT rightsubnet=vhost:%priv also=L2TP-PSK-noNAT conn L2TP-PSK-noNAT authby=secret pfs=no auto=add keyingtries=3 rekey=no ikelifetime=8h keylife=1h type=transport left=%defaultroute leftprotoport=17/1701 right=%any rightprotoport=17/%any
- サンプルをコピーしている場合は、以下の部分を変更する。
# vi /etc/ipsec.d/l2tp-psk.conf left=%defaultroute rightprotoport=17/%any conn passthrough-for-non-l2tp 以下を全て消すか、コメントアウトする。
- type は L2TP/IPsec するには、transport にする必要があります。
- left は VPS 自身の IP アドレスを設定しますが、%defaultroute にすると、デフォルト ゲートウェイとなるインターフェースの IPアドレスに自動的に設定されます。
- leftprotoport は IPsec 上に流すプロトコルを指定します。L2TPパケットを流して欲しいので、L2TP が使用する 1701/udp を指定します。17/1701 または udp/l2tp と書けば OK です。(17は UDPのプロトコル番号)
- right は、接続元ルータ等のグローバル IP アドレスですが、制限しない場合は、%any とします。
- rightprotoport は、leftprotoportと同じで IPsec 上に流す他のプロトコルを指定します。なので、17/1701 で良いのですが、端末が VPN接続できないとか、接続しても通信が行えないような場合は、17/%any にしてみてください。
なお、rightprotoport=17/0 は1台しか VPN接続しない場合は設定できますが、それ以外には使えません。(認証は何台でも可能ですが、実際の通信は1台に限られます)
- サンプルをコピーしている場合は、以下の部分を変更する。
- 「事前共有キー」を設定する。事前共有キーは、認証したい VPNサーバと端末だけが知っている鍵のことで、IPsec の最初のネゴシエーションで使われる。
# vi /etc/ipsec.secrets : PSK "Preshared key authentication"
- この例の場合は、「Preshared key authentication」が、L2TP/IPsec 時の事前共有キーとなります。
IPsec – Cent OS 設定
今回の構成では、VPS にグローバル IPアドレス以外の別のネットワークが出来ています。(インターフェースは、pppX1 )
そのため、ppp インターフェースから他のインターフェースへ通信ができる(ルーティング)ように、一部の CentOS 自体の設定を変更します。
# vi /etc/sysctl.conf net.ipv4.ip_forward = 1 # = 0 を 1 にします。
また、IPsec Kernel コードとして NETKEY を使う場合、以下の設定も必要になります。全てのインターフェースに対して行います。 (/etc/sysctl.conf の最後にでも追加してください)
# vi /etc/sysctl.conf net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.lo.send_redirects = 0 net.ipv4.conf.eth0.send_redirects = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.lo.accept_redirects = 0 net.ipv4.conf.eth0.accept_redirects = 0
設定を有効化します。
# sysctl -p
IPsec の設定の確認は以下のコマンドで行えます。
# ipsec verify
自動起動設定
- サービス登録して、起動します。
# chkconfig ipsec on # service ipsec start
- 1接続のみなら ppp0、以降 ppp1, ppp2 と増えていく。 [↩]
関連するコンテンツ
- VPN 接続した N-06C にプロキシを通す ~N-06C の VPN 事情
- WLI-UC-GN について
- N-06C の VPN 事情
- PPTP を Cent OS 5.x にインストールする ~N-06C の VPN 事情
- 複数ドメイン環境における SpamAssassin の設定にハマる
コメントを残す