2010年6月11日金曜日

OpenswanでIPsec(たぶん一番簡単な方法)

スズキです。

下記構成のVPNの実現です。

A-CLIENT --- A-GATEWAY ---(VPN)--- B-GATEWAY --- B-CLIENT
A-CLIENT: 192.168.12.2
A-GATEWAY: 192.168.12.1, 192.168.11.41
B-GATEWAY: 192.168.13.1, 192.168.11.43
B-CLIENT: 192.168.13.2

上記構成でOpenswanを利用して、
IPsecによりA-CLIENTからB-CLIENTへVPN接続できるようにします。

まず両GATEWAYに、下記で紹介したようにOpenswanを導入します。
http://blog.suz-lab.com/2010/06/ec2-l2tpipsec-iphone_02.html

次に設定ですが、こちらも両GATEWAY、同じ設定をします。

--------【ipsec.secrets】--------
: PSK "vpn"
--------
※両サーバ共通です。

--------【ipsec.conf】--------
version 2.0
config setup
  nat_traversal=yes
  virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
  oe=off
  protostack=netkey
conn sample
  authby=secret
  left=192.168.11.41
  leftsubnet=192.168.12.0/24
  leftnexthop=%defaultroute
  right=192.168.11.43
  rightsubnet=192.168.13.0/24
  rightnexthop=%defaultroute
  auto=add
--------
※authby: "secret"と"rsasig"が指定できますが、"secretです。
※left: もう一方のVPN-GATEWAYに繋がってるIFのアドレスです。
※leftsubnet: ローカルのサブネットです。
※right: もう一方のVPN-GATEWAYに繋がってるIFのアドレスです。
※rightsubnet: ローカルのサブネットです。
※auto=add

これでOpenswanは起動するはずですが、正常に動作させるためには、
下記のコマンド結果からFAILEDをなくさなければいけません。

# ipsec verify
--------
Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path [OK]
Linux Openswan U2.6.26/K2.6.18-194.3.1.el5.centos.plus (netkey)
Checking for IPsec support in kernel [OK]
Testing against enforced SElinux mode [FAILED]
SElinux is running in 'enforced' mode.
If you encounter network related SElinux errors, especially when using KLIPS,
try disabling SElinux using:
echo "0" > /selinux/enforce (or edit /etc/sysconfig/selinux)
NETKEY detected, testing for disabled ICMP send_redirects [FAILED]
Please disable /proc/sys/net/ipv4/conf/*/send_redirects
or NETKEY will cause the sending of bogus ICMP redirects!
NETKEY detected, testing for disabled ICMP accept_redirects [FAILED]
Please disable /proc/sys/net/ipv4/conf/*/accept_redirects
or NETKEY will accept bogus ICMP redirects!
Checking for RSA private key (/etc/ipsec.secrets) [OK]
Checking that pluto is running [OK]
Pluto listening for IKE on udp 500 [FAILED]
Cannot execute command "lsof -i UDP:500": そのようなファイルやディレクトリはありません
Pluto listening for NAT-T on udp 4500 [FAILED]
Cannot execute command "lsof -i UDP:4500": そのようなファイルやディレクトリはありません
Two or more interfaces found, checking IP forwarding [FAILED]
Cannot execute command "lsof -i UDP:4500": そのようなファイルやディレクトリはありません
Checking for 'ip' command [OK]
Checking for 'iptables' command [OK]
Opportunistic Encryption Support [DISABLED]
--------

ということで、ひとつずつ解決していきます。

========
Testing against enforced SElinux mode [FAILED]
--------
SElinux is running in 'enforced' mode.
If you encounter network related SElinux errors, especially when using KLIPS,
try disabling SElinux using:
echo "0" > /selinux/enforce (or edit /etc/sysconfig/selinux)
========

SElinuxを無効にしなければいけないので、
"/etc/sysconfig/selinux"を下記のように調整します。

--------【selinux】--------
...
SELINUX=disabled
...
--------

========
NETKEY detected, testing for disabled ICMP send_redirects [FAILED]
--------
Please disable /proc/sys/net/ipv4/conf/*/send_redirects
or NETKEY will cause the sending of bogus ICMP redirects!
========
NETKEY detected, testing for disabled ICMP accept_redirects [FAILED]
--------
Please disable /proc/sys/net/ipv4/conf/*/accept_redirects
or NETKEY will accept bogus ICMP redirects!
========

下記のように、"/etc/sysctl.conf"を調整します。

--------【sysctl.conf】--------
...
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.eth1.send_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.eth1.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
...
--------

========
Pluto listening for IKE on udp 500 [FAILED]
Cannot execute command "lsof -i UDP:500": そのようなファイルやディレクトリはありません
Pluto listening for NAT-T on udp 4500 [FAILED]
Cannot execute command "lsof -i UDP:4500": そのようなファイルやディレクトリはありません
Two or more interfaces found, checking IP forwarding [FAILED]
Cannot execute command "lsof -i UDP:4500": そのようなファイルやディレクトリはありません
========

"lsof"コマンドが無いということなので、下記でインストールです。

# yum install lsof

この状態でリブートして再度確認すると、
下記のようにFAILEDが無くなっているのがわかります。

# ipsec verify
--------
Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path [OK]
Linux Openswan U2.6.26/K2.6.18-194.3.1.el5.centos.plus (netkey)
Checking for IPsec support in kernel [OK]
NETKEY detected, testing for disabled ICMP send_redirects [OK]
NETKEY detected, testing for disabled ICMP accept_redirects [OK]
Checking for RSA private key (/etc/ipsec.secrets) [OK]
Checking that pluto is running [OK]
Pluto listening for IKE on udp 500 [OK]
Pluto listening for NAT-T on udp 4500 [OK]
Two or more interfaces found, checking IP forwarding [OK]
Checking NAT and MASQUERADEing [N/A]
Checking for 'ip' command [OK]
Checking for 'iptables' command [OK]
Opportunistic Encryption Support [DISABLED]
--------

最後に、A-CLIENTからB-CLIENTに"ping"すると、
ちゃんと通じていることが確認できます。

次は、Netscreenと接続だ...
--------
http://www.suz-lab.com

0 コメント: