■GRE over IPSecの設定
IPSecでは通常ユニキャストパケットしか通信することができません。その他のマルチキャストやブロードキャストパケットを通すことが出来ないのが基本です。これを可能にするのがGRE ( Generic Routing Encapsulation ) over IPSecです。GREを用いてパケットをカプセル化することによりマルチキャストやブロードキャストをユニキャストとして転送することが可能です。マルチキャストが可能になるということはそれはつまりダイナミックルーティングが可能となるわけでこれがGREを使用する最大のメリットとなります。
Ciscoルータでは当然のごとくダイナミックルーティングは正常に動くのでルータでVPNを設定するときはこのGREでダイナミックルーティングを使用し、ようやくルータでVPNを設定するメリットが見いだせるわけです。多拠点とVPN通信する必要がありOSPFやEIGRPを使用したい、といった場合にはルータで設定することをおすすめします。ダイナミックルーティングを使わない、パフォーマンス重視という場合にはルータではなくASAを使用することを奨励します。
以下の構成を元にルータを設定します。
このときのR1の設定は以下のようになります。
※IKEポリシー作成。暗号化方式や認証方式、Diffie-Hellmanなどを設定。 crypto isakmp policy 1 encr aes authentication pre-share group 5 ※対向ルータと認証に利用する事前共有キーおよびIPアドレスを指定する。 crypto isakmp key 6 cisco address 10.0.0.2 ! ! ※トランスフォームセットの作成。VPNトンネル内の暗号化方式と認証方式を設定。 crypto ipsec transform-set TS esp-aes 256 esp-sha-hmac mode transport ! ※Tunnelインターフェイスに適用するIPSecプロファイルを作成。 crypto ipsec profile gre_tunnel set security-association lifetime seconds 28800 set transform-set TS ! ! ! ! interface FastEthernet0/0 ip address 10.0.0.1 255.255.255.0 duplex auto speed auto ! ※Tunnelインターフェイスの作成しIPSecプロファイルを適用。 interface Tunnel1 ip address 172.16.0.1 255.255.255.0 tunnel source FastEthernet0/0 tunnel destination 10.0.0.2 tunnel mode ipsec ipv4 tunnel protection ipsec profile gre_tunnel ! interface FastEthernet0/0 ip address 10.0.0.1 255.255.255.0 duplex auto speed auto ! interface FastEthernet0/1 ip address 192.168.1.1 255.255.255.0 duplex auto speed auto ! router ospf 110 log-adjacency-changes network 172.16.0.0 0.0.0.255 area 0 network 192.168.1.0 0.0.0.255 area 0 |
R2でも同様な設定がされており、OSPFのネイバーがはれているという状態です。
この状態でTunnelインターフェイスを経由して送信されるパケットは暗号化して送信されます。OSPFは次のようになっておりますので、192.168.2.0/24あてに対する通信はTunnelインターフェイスを経由して暗号化されます。逆にいうと192.168.2.0/24以外についてはTunnelインターフェイスは経由せずFa0/0経由で暗号化されずにそのまま送信されます。
上記ではTunnelインターフェイスに対してプロファイルを適用していますが、crypto mapを作成し物理インターフェイスに適用することも可能です。動作的にはほぼ同じなのですが、唯一の違いはcrypto mapの場合はVPN通信対象をACLとして定義することで実際のトラフィックをトリガーにSAを生成するのに対して、IPSecプロファイルはトンネルインターフェイスに対して設定を適用した時点でSAが生成される、という点が異なります。
R1# show ip route Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route Gateway of last resort is 10.0.0.2 to network 0.0.0.0 172.16.0.0/24 is subnetted, 1 subnets C 172.16.0.0 is directly connected, Tunnel1 10.0.0.0/24 is subnetted, 1 subnets C 10.0.0.0 is directly connected, FastEthernet0/0 C 192.168.1.0/24 is directly connected, FastEthernet0/1 O 192.168.2.0/24 [110/11121] via 172.16.0.2, 00:11:26, Tunnel1 S* 0.0.0.0/0 [1/0] via 10.0.0.2 |
show crypto関連の出力は次のようになります。
R1# show crypto isa sa dst src state conn-id slot status 10.0.0.1 10.0.0.2 QM_IDLE 1 0 ACTIVE R1# show crypto ipse sa interface: Tunnel1 Crypto map tag: Tunnel1-head-0, local addr 10.0.0.1 protected vrf: (none) local ident (addr/mask/prot/port): (0.0.0.0/0.0.0.0/0/0) remote ident (addr/mask/prot/port): (0.0.0.0/0.0.0.0/0/0) current_peer 10.0.0.2 port 500 PERMIT, flags={origin_is_acl,} #pkts encaps: 15912, #pkts encrypt: 15912, #pkts digest: 15912 #pkts decaps: 16086, #pkts decrypt: 16086, #pkts verify: 16086 #pkts compressed: 0, #pkts decompressed: 0 #pkts not compressed: 0, #pkts compr. failed: 0 #pkts not decompressed: 0, #pkts decompress failed: 0 #send errors 0, #recv errors 0 local crypto endpt.: 10.0.0.1, remote crypto endpt.: 10.0.0.2 path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet0/0 current outbound spi: 0xF793EF7A(4153667450) <省略> |
上記の太文字の部分でカウンタがリアルタイムに上がっていれば通信も問題ありません。
GREトンネリングを設定した際にブラウザによるインターネットアクセスが出来ないということが起こりえます。GREトンネリングではIPパケットをカプセル化するためパケット長が24バイト長くなります。そのためトンネルインターフェイスのMTUサイズは回線のMTUサイズよりも24バイト小さい値になります。例えばイーサネットであればデフォルトで1500バイトなのでGREトンネルを設定すると1500-24=1476バイトということになります。これがアプリケーションによっては1477以上1500以下のサイズでデータを送信した際にパケットを送ることができずに、さらに分割 ( フラグメント )が禁止されている状況下においては通信ができないという状況に陥ります。
これを防ぐための手法の一つとしてMTU / MSSサイズの微調整が挙げられます。以下ではMTUを1500、MSSを1460に設定しています。一般的にMTU/MSSはセットで設定し、MTUは外部、MSSは内部インターフェイスに設定し、MSSの値はMTU-40となります。この設定により端末はMSSの値 ( 1460 )よりも大きなパケットは送出しなくなります。
interface Tunnel1 ip mtu 1500 interface FastEthernet0/1 ip tcp adjust-mss 1460 |
別な手法としてフラグメントをそもそも許可するということも可能です。但し、これを設定すると通信は正常なもののスループットが低下することもありますので遅延に敏感なものであれば注意が必要です。フラグメントを許可するにはdfビットを0にセットします。
route-map clear-df permit 10 set ip df 0 interface FastEthernet0/1 ip policy route-map clear-df |