ネトサバ日記

インフラに関する投稿をしていきます

EdgeRouter XでNATしたLAN同士を拠点間VPNさせる

東京に来てから大阪のサーバに触れてなくていち早くVPNを繋がないとと思いながら2ヶ月ぐらい立ってやっとIPsecについてわかってきたました。
もしかしたら技術的に間違ってることを書いてるかもしれないので自己責任で

前提

  • NATされたLAN同士をIPsec拠点間接続する
  • どちらも固定アドレスではないのでDDNSを使う
  • HGWで外部アドレスをNAT変換
  • HGW配下のEdgeRouter同士をVPN接続
  • GREフレッツ光で借りているHGWがポート開放対応していないのでなしで
    (PPTP用のポート開けば勝手にGREも開くらしいけどそれはセキュリティ的にどうなの?ってことでNG)

EdgeRouter

今回は以下のEdgeRouter XをA,Bネットワークに一つずつ設置


Version: v1.9.1
Build ID: 4939092
Build on: 12/14/16 07:02
Copyright: 2012-2016 Ubiquiti Networks, Inc.
HW model: EdgeRouter X 5-Port
HW S/N: xxxxxxxxxxxxx
Uptime: 21:22:22 up 11:43, 1 user, load average: 1.05, 1.06, 1.09


方法

IPsecでNATを介して通信するのはどうやら苦手らしくて非固定アドレスなのも苦手らしい
詳細については、http://www.infraexpert.com/study/ipsec14.htmlで特に言及されてるようにポートフォワーディングでレイヤ4のESPやAHにはUDPのようにポートが無いからNAPT変換できないため
なのでNATトラバーサルによって解決します

IPsecを使う上で、まずIKEでIPsecに使うトンネルを作成する
そのIKEを使う上でもフェーズが2つあって、フェーズ1の接続はじめで大体は、暗号化されていない状態でIDを交換する
このIDというのが認証素材によって変わるらしく、公開鍵認証とPKI認証ではその素材鍵によってのみ認証する
しかし、共通鍵認証ではお互いのIPアドレスを鍵としているみたいです
なので、NAT変換していく中でIPアドレスが変わってきているため認証できないみたいです
IKEアグレッシブモードにするとID認証完了するまでに次のフェーズに行くのでセキュリティ低下するがおそらくは共通鍵認証でもいけるはず
ただ、EdgeRouterでは、共通鍵認証でアグレッシブモードは許可してないみたいなのでできませんでした

設定


interfaces {
ethernet eth0 {
address 192.168.0.2/24
duplex auto
speed auto
}

protocols {
static {
route 192.168.128.0/17 {
next-hop 192.168.128.2 {
}
}
}
}

vpn {
ipsec {
auto-firewall-nat-exclude disable
esp-group ESP {
lifetime 3600
mode tunnel
proposal 10 {
encryption aes128
hash sha1
}
}
ike-group IKE {
key-exchange ikev1
lifetime 28800
mode main
proposal 10 {
dh-group 2
encryption aes128
hash sha1
}
}
ipsec-interfaces {
interface eth0
}
nat-networks {
allowed-network 192.168.128.0/17 {
}
}
nat-traversal enable
site-to-site {
peer "BネットワークFQDN" {
authentication {
id A
mode rsa
remote-id B
rsa-key-name B.pub
}
connection-type initiate
default-esp-group ESP
ike-group IKE
local-address any
tunnel 0 {
esp-group ESP
local {
prefix 192.168.128.0/17
}
remote {
prefix 192.168.0.0/17
}
}
}
}
}

とりあえずこれで最低限の拠点間接続ができる
もしダイナミックルーティングが必要ならVTIとか適用するばいいんだろうけど今のところはこれで...
というかもしかしたらVTIだとトンネルIPアドレスがIDになるならそれでもいいのかも