Openswanを使って拠点間VPNを構築する

OpenswanとはLinux環境にIPsec機能を実装するソフトウェアです。
これまでの記事で紹介したvyattaやUT-VPNで使用されるSSL-VPNはL5層で実現しているのに対し、
IPsecVPNはL3層で実現するなど、実装方法が異なる他、
IPsecでは一般的に速度が遅い、ユーザー単位での制御が難しい、専用クライアントが必要などな点で、
専用の機器を用いた拠点間通信以外で使われる事は少なくなりました。

■ネットワーク構成

vyatta
前回のvyattaの記事で使用した画像を流用していますが、
今回もA拠点・B拠点の2拠点を接続する構成とします。

■Openswanの導入&設定

・Openswanのインストール

 yum -y install openswan

・ファイアウォールの設定(拠点A側)
以下を設定し、/etc/init.d/iptables restartでファイアウォール設定を反映します。

vi /etc/sysconfig/iptables
--------------------------------------------------

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.163.0/24 -j MASQUERADE
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p udp --dport 500 -j ACCEPT
-A INPUT -p tcp --dport 500 -j ACCEPT
-A INPUT -p tcp --dport 4500 -j ACCEPT
-A INPUT -p udp --dport 4500 -j ACCEPT
-A INPUT -p esp -j ACCEPT
-A FORWARD -s 192.168.163.0/24 -d 192.168.164.0/24 -j ACCEPT
-A FORWARD -s 192.168.164.0/24 -d 192.168.163.0/24 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

・ファイアウォールの設定(拠点B側)
以下を設定し、/etc/init.d/iptables restartでファイアウォール設定を反映します。

vi /etc/sysconfig/iptables
--------------------------------------------------

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.164.0/24 -j MASQUERADE
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p udp --dport 500 -j ACCEPT
-A INPUT -p tcp --dport 500 -j ACCEPT
-A INPUT -p tcp --dport 4500 -j ACCEPT
-A INPUT -p udp --dport 4500 -j ACCEPT
-A INPUT -p esp -j ACCEPT
-A FORWARD -s 192.168.163.0/24 -d 192.168.164.0/24 -j ACCEPT
-A FORWARD -s 192.168.164.0/24 -d 192.168.163.0/24 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

・拠点A、拠点BのOpenswan設定
設定は共に共通となります。

vi /etc/ipsec.conf
--------------------------------------------------
config setup
protostack=netkey
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

conn sample
authby=secret
left=A.A.A.A
leftsubnet=192.168.163.0/24
leftnexthop=%defaultroute
right=B.B.B.B
rightsubnet=192.168.164.0/24
rightnexthop=%defaultroute
auto=start

・事前共有鍵の設定(拠点A、拠点B共通)
SSL-VPNでは公開鍵を利用するのに対し、IPsecでは事前共有鍵を利用してVPN認証を行います。

vi /etc/ipsec.secrets
--------------------------------------------------
: PSK "testtest"

■ネットワーク転送設定、動作確認

・ネットワーク転送を有効にする

vi /etc/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

・設定の反映

/sbin/sysctl -p

・設定の動作確認

/usr/sbin/ipsec verify

動作確認で[FAILED]が出なくなればOKです。
お互いにpingを飛ばして疎通ができるか確認してみてください。

今回はOpenswanを使って拠点間VPNを構築しましたが、
この方法ではLinux対LinuxでしかVPNを構築できません。

IPsecを応用してリモート接続を行う事ができるL2TP/IPsecという方式もありますので、
次回はL2TP通信でLinuxとWindowsの組み合わせでリモート接続を行いたいと思います。

最新ブログ一覧