IPsec/IKEv2:スマホを介したサイト間の接続

IPsec接続においてNATが2段のときは認証は通るがサブネットがつながらないためエラーになります。そうした場合、virtual IPを利用した方法になりますが、今度は接続した1台しかつながらなくなります。そこでもう少し掘り下げてSNATを使ってサイトとサイトを繋ぐ方法を考えてみます。

レイアウト図:

192.168.1.190/27--192.168.1.161/27
   Thinkpad      Travel router(OpenWrt)   
                  192.168.43.200/24--192.168.43.1/24
                                        Droid
                                        APN(Pub IP)--61.*.*.*/32
                                                        VPS
                                                     192.168.10.1/24--.10.101-105
                                                                       Server1-5

Travel RouterはスマートフォンのテザリングでVPSとVirtual IPでつながっています。

Travel Router        VPS
192.168.100.1/32 === 192.168.10.0/24

この接続ではTravel RouterからVPSに接続する分にはなんの問題もありません。ところがルーターに繋がれたThinkpadはipsecのルールで192.168.100.1のIPしかトンネルを通過できません。そこでsnatを使うとローカルアドレスを192.168.100.1に書き換えることによってトンネルを通過することができるようなります。

OpenWrtのWEBコントロールパネルでNetwork>Firewall>Traffic Rules>Source NATで設定します。SNAT IP addressは192.168.100.1でよいのですが、Source IP addressがIPの範囲で設定できるかOpenWrtのサイトを覗いたがよくわからなかったので、ネットワークアドレスで指定してみました。具体的には192.168.1.176/28として192.168.1.160/27サブネットを2分割しました。サブネット192.168.1.176/28はsnatでvpsに接続できますが、サブネット192.168.1.160/28はできません。

設定例)

リモートサーバ(GW側)のipsec.conf:

config setup
 plutostart=no
 conn %default
 ikelifetime=60m
 keylife=20m
 rekeymargin=3m
 keyingtries=1

conn common
 keyexchange=ikev2
 leftcert=ServerCert.pem
 leftsourceip=%config 
 leftid=****.vps.*****.jp
 leftauth=pubkey
 leftfirewall=yes

# EAP for travelrouter
conn vps-travelrouter
 left=%defaultroute
 leftsubnet=192.168.10.0/24
 leftsendcert=always
 right=%any
 rightid="C=US, O=MyDomain, CN=wmr300-linux@*****.***dns.jp"
 rightid2=wmr300-ap@*****.***dns.jp
 rightauth=pubkey
 rightallowany=yes
 rightsourceip=192.168.100.1/32
 dpdaction=clear
 dpddelay=300s
 rekey=no
 reauth=no
 fragmentation=yes
 eap_indentity=%any
 ike=aes128-sha256-modp2048,aes256-sha384-modp2048,aes256-sha256-modp2048
 esp=aes128-sha256-modp2048,aes256-sha384-modp2048,aes256-sha256-modp2048
 also=common
 auto=add

Travel router側のipsec.conf:

config setup

conn %default
 ikelifetime=60m
 keylife=20m
 rekeymargin=3m
 keyingtries=1

conn common
 leftcert=ClientCert.pem
 leftsourceip=%config
 leftid2=wmr300-ap@*****.***dns.jp
 leftauth=pubkey
 leftfirewall=yes
 keyexchange=ikev2

conn vps
 left=%any
 right=******.vps.*****.jp
 #rightid=@******.vps.****.jp
 rightsubnet=192.168.10.0/24
 rightauth=pubkey
 also=common
 auto=start

OpenWrt:/etc/config/firewall

config redirect
 option target 'SNAT'
 option src 'lan'
 option dest 'wan'
 option proto 'all'
 option src_dip '192.168.100.1'
 option name 'test'
 option src_ip '192.168.1.176/28'

以上で完成です。