2021年5月16日日曜日

NEC IX2215でPPPoEとMAP-EによるIPv4接続を共存させてみた

外へのインターネット接続を、いい加減PPPoE方式による接続から、MAP-E方式による接続に切り替えたいと思っていたところ、思わぬ形でNECのIX2215というルーターをゲットしましたので早速やってみました。

NECの公式の方にMAP-E方式で接続する場合の設定例もアップされているため、MAP-Eでのインターネットへの接続自体は割とあっさりと行けました。

しかし、MAP-E方式では、一つのグローバルIPアドレスのうち、一部のポートのみが割り当てられる仕様のため、ポート開放は行えないためにサーバー用途での利用は事実上厳しいので、そのあたりをクリアするためには従来のPPPoE方式も併用する必要が出てきます。
(PPPoE方式ではプロバイダにもよりますが、グローバルIPアドレスが1つ割り当てられ、自由にポート開放したりできるため)

最初は、今回買ったIX2215でMAP-E接続を行い、外界との通信は基本的にそちらに流れるようにして、一部の通信のみは今までのルーター側に流してPPPoE接続側を通るようにしようかとも考えておりましたが、IX2215の設定をあれこれ弄り回すうちに、これって両方のセッションを一台で共存させて振り分けられるのでは?と思ったので試してみました。

イメージとしては下記となります。

  • GigaEthernet0 (GE0)をFlets回線へ接続
  • GigaEthernet1 (GE1)は外部公開しないマシン用のネットワークとして、別のスイッチに接続
  • GigaEthernet2 (GE2)をポートベースVLANで分割し、ポート1から4を外部公開するサーバー用に、ポート5から8を内部用に設定
  • 外部公開するサーバーは、「10.168.0.0/24」のネットワークに設置し、このネットワーク範囲から外部へのアクセスをIPv4アクセスリストで認識し、PPPoE側へと流す。
    (interface: GigaEthernet2:1.0 / route-map: pppoe-route / access list: local-filter)
  • それ以外のネットワークから外部にアクセスする場合、すべてIPoE側に流れるようにデフォルトルートを設定する。
    (デフォルトルート: Tunnel0.0)

大雑把に言うと、特定のネットワーク範囲のマシンから外部に通信する場合のみPPPoE側に流し、それ以外はすべてIPoE側に流すという動作をするように設定します。

構成例は下記となります。

  1. ip ufs-cache max-entries 20000
  2. ip ufs-cache enable
  3. ip route default Tunnel0.0
  4. ip dhcp enable
  5.  
  6. ipv6 ufs-cache max-entries 10000
  7. ipv6 ufs-cache enable
  8. ipv6 dhcp enable
  9.  
  10. proxy-dns ip enable
  11. proxy-dns ip request both
  12.  
  13. ipv6 access-list block-list deny ip src any dest any
  14. ipv6 access-list dhcpv6-list permit udp src any sport any dest any dport eq 546
  15. ipv6 access-list dhcpv6-list permit udp src any sport any dest any dport eq 547
  16. ipv6 access-list icmpv6-list permit icmp src any dest any
  17. ipv6 access-list tunnel-list permit 4 src any dest any
  18. ipv6 access-list other-list permit ip src any dest any
  19. ipv6 access-list dynamic cache 65535
  20. ipv6 access-list dynamic dflt-list access other-list
  21.  
  22. ip access-list reject-outgoing deny udp src any sport eq 135 dest any dport any
  23. ip access-list reject-outgoing deny udp src any sport any dest any dport eq 135
  24. ip access-list reject-outgoing deny tcp src any sport eq 135 dest any dport any
  25. ip access-list reject-outgoing deny tcp src any sport any dest any dport eq 135
  26. ip access-list reject-outgoing deny udp src any sport eq 445 dest any dport any
  27. ip access-list reject-outgoing deny udp src any sport any dest any dport eq 445
  28. ip access-list reject-outgoing deny tcp src any sport eq 445 dest any dport any
  29. ip access-list reject-outgoing deny tcp src any sport any dest any dport eq 445
  30. ip access-list reject-outgoing deny ip src any dest 10.0.0.0/8
  31. ip access-list reject-outgoing deny ip src any dest 172.16.0.0/12
  32. ip access-list reject-outgoing deny ip src any dest 192.168.0.0/16
  33. ip access-list reject-outgoing permit ip src any dest any
  34.  
  35. ip access-list local-filter deny ip src any dest 10.0.0.0/8
  36. ip access-list local-filter deny ip src any dest 172.16.0.0/12
  37. ip access-list local-filter deny ip src any dest 192.168.0.0/16
  38. ip access-list local-filter permit ip src any dest any
  39.  
  40. route-map pppoe-route permit 10
  41. match ip address access-list local-filter
  42. set default interface GigaEthernet0.1
  43. set interface GigaEthernet0.1
  44.  
  45. ip dhcp profile dhcpv4-sv
  46. dns-server 10.168.6.1
  47.  
  48. ipv6 dhcp client-profile dhcpv6-cl
  49. information-request
  50. option-request dns-servers
  51.  
  52. ipv6 dhcp server-profile dhcpv6-sv
  53. dns-server dhcp
  54.  
  55. ppp profile ppp_profile
  56. authentication myname hoge@fuga.com
  57. authentication password hoge@fuga.com password
  58.  
  59. interface GigaEthernet0.0
  60. no ip address
  61. ipv6 enable
  62. ipv6 address autoconfig receive-default
  63. ipv6 dhcp client dhcpv6-cl
  64. ipv6 filter dhcpv6-list 1 in
  65. ipv6 filter icmpv6-list 2 in
  66. ipv6 filter tunnel-list 3 in
  67. ipv6 filter block-list 100 in
  68. ipv6 filter dhcpv6-list 1 out
  69. ipv6 filter icmpv6-list 2 out
  70. ipv6 filter tunnel-list 3 out
  71. ipv6 filter dflt-list 100 out
  72. no shutdown
  73.  
  74. interface GigaEthernet0.1
  75. ppp binding ppp_profile
  76. ip address ipcp
  77. ip napt enable
  78. ip tcp adjust-mss auto
  79. no shutdown
  80. ip napt service http 10.168.0.80 none tcp 80
  81. ip napt service softether 10.168.0.30 none tcp 5555
  82. ip filter reject-outgoing 1 out
  83.  
  84. interface GigaEthernet1.0
  85. ip address 10.168.7.254/24
  86. no shutdown
  87.  
  88. device GigaEthernet2
  89. vlan-group 1 port 1 2 3 4
  90. vlan-group 2 port 5 6 7 8
  91.  
  92. interface GigaEthernet2:1.0
  93. ip address 10.168.0.254/24
  94. ip policy route-map pppoe-route
  95. no shutdown
  96.  
  97. interface GigaEthernet2:2.0
  98. ip address 10.168.6.1/24
  99. no shutdown
  100.  
  101. interface Tunnel0.0
  102. tunnel mode map-e
  103. ip address map-e
  104. ip tcp adjust-mss auto
  105. ip napt enable
  106. ip filter reject-outgoing 1 out
  107. no shutdown
  108.  

ハマりやすいところとしては、GigaEthernet2:1.0からの通信をIPv4アクセスリストなしですべてroute-mapで処理してしまうと、外部公開するサーバーと内部のマシンがルーターを介して一切通信できなくなってしまいます。
そのため、アクセスリストでプライベートIPアドレスの範囲を検出して、route-map適用除外を行ってやる必要があります。

また、アクセスリストの最後に「ip access-list local-filter permit ip src any dest any」を書かないと、すべてのパケットがroute-map適用除外になってしまい、MAP-E側に流れてしまうのでこれまた失敗となってしまいます。

結果的にこのようになり、安定して稼働しております。

上記の設定に更に追加で、ポートベースVLANの上にタグVLANも乗っけて動くように構成してあります。

IX2105やIX2106など、ポート数が少ない機種で試す場合はインターフェース名などを適宜変更すれば動くかもしれません。