VTI の中身


Published on

VYATTA USERS MEETING Spring 2013 の資料です。

Published in: Technology

VTI の中身

  1. 1. VTI の中身浅間 正和 @ 有限会社 銀座堂
  2. 2. VTI とは?• Virtual Tunnel Interface の略で Vyatta ( Network OS | Core ) 6.5R1 から実装された中身が暗号化 される IP-IP tunnel のようなモノ
  3. 3. Benefits• They are capable of having traffic routed to them • They are capable of passing routing protocols over  them • They do not require local or remote subnets to be  specified • They operate as if the peer interfaces are directly  connected (Vyatta VPN Reference Guide 6.5R1 v01 より引用)
  4. 4. Vyatta configuration の違い interfaces { vti vti0 { } }vpn { protocols { ipsec { static site-to-site { interface-route { peer { next-hop-interface vti0 { default-esp-group ESP-G } ike-group IKE-G } local-address } tunnel 1 { } local { vpn { prefix ipsec { } site-to-site { remote { peer { prefix ike-group IKE-G } local-address } vti { } bind vti0 } esp-group ESP-G } }} } } } } 従来 VTI
  5. 5. /etc/ipsec.conf の違い conn peer- peer- left= left= right= right= leftsubnet= leftsubnet= rightsubnet= rightsubnet= ike=aes256-sha1! leftsourceip= ikelifetime=28800s ike=aes256-sha1! esp=aes256-sha1! ikelifetime=28800s keylife=3600s esp=aes256-sha1! rekeymargin=540s keylife=3600s type=tunnel rekeymargin=540s pfs=yes type=tunnel compress=no pfs=yes authby=secret compress=no mark=2415919105 authby=secret leftupdown="/usr/lib/ipsec/vti- auto=start up-down.sh vti0" keyingtries=%forever auto=start keyingtries=%forever 従来 VTI
  6. 6. ip xfrm policy list 実行結果の違い src dst dir out priority 2051src dst mark -1879048191/0xffffffff dir out priority 1859 tmpl src dst tmpl src dst proto esp reqid 16384 mode tunnel proto esp reqid 16384 mode tunnel src dst dst dir fwd priority 2051 dir fwd priority 1859 mark -1879048191/0xffffffff tmpl src dst tmpl src dst proto esp reqid 16384 mode tunnel proto esp reqid 16384 mode tunnelsrc dst src dst dir in priority 1859 dir in priority 2051 tmpl src dst mark -1879048191/0xffffffff proto esp reqid 16384 mode tunnel tmpl src dst proto esp reqid 16384 mode tunnel 従来 VTI
  7. 7. 設定時の流れ• /opt/vyatta/sbin/vpn-config.pl が実行される • /etc/ipsec.conf の生成と ipsec start の実行• /opt/vyatta/sbin/vyatta-vti-config.pl が実行される • sudo /opt/vyatta/sbin/cfgvti add name $tunName   key $mark remote $remote local $local の実行 • sudo iptables -t mangle -D PREROUTING -s   $remote -d $local ( -p esp | -p udp --dport 4500 )  -j MARK --set-mark $mark の実行
  8. 8. /opt/vyatta/sbin/cfgvti• git repo の build-iso/pkgs/vyatta-cfg-vpn/src/cfgvti.c • … C で書かれたプログラム…なぜ…?• なななんと実は VTI は net/ipv4/ipip.ko ではなく net/ipv4/ip_vti.ko だった…。 commit 1181412c1a671ed4e8fb1736f17e6ec617c68059 Author: Saurabh <saurabh.mohan@vyatta.com> Date: Tue Jul 17 09:44:54 2012 +0000 net/ipv4: VTI support new module for ip_vti. New VTI tunnel kernel module, Kconfig and Makefile changes. Signed-off-by: Saurabh Mohan <saurabh.mohan@vyatta.com> Reviewed-by: Stephen Hemminger <shemminger@vyatta.com> Signed-off-by: David S. Miller <davem@davemloft.net>
  9. 9. net/ipv4/ip_vti.ko• Linux kernel の main line には v3.6 から merge• (Vyatta 6.5R1 は v3.3 なので backport?)• net/ipv4/ipip.ko を元にしているが xfrm の esp が処理してくれる encap/decap は省かれている• 一番重要な違いは xmit 時に mark を付けるこ とで xfrm policy に引っ掛けるようにしている こと
  10. 10. 送受信時の流れ• 送信時の流れ • net/ipv4/ip_vti.ko の vti_tunnel_xmit が呼ば れる • VTI を一意に表す mark を付け xfrm に流す • xfrm が encap し暗号化• 受信時の流れ • Netfilter が mask を付ける • mark から xfrm policy が判明し復号化と decap 処理
  11. 11. まとめ• Dynamic routing や QoS と組み合わせて使え るのはかなり便利?• もとは Cisco さんが最初にやった方式? Vyatta VPN Reference にも compatible with 3rd party VTI/route-based VPN connections と書か れているので相互接続性もバッチリ?• ちなみに … and is sometimes required for connectivity with pubic cloud offerings だそう です…