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側に流すという動作をするように設定します。

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

ip ufs-cache max-entries 20000
ip ufs-cache enable
ip route default Tunnel0.0
ip dhcp enable

ipv6 ufs-cache max-entries 10000
ipv6 ufs-cache enable
ipv6 dhcp enable

proxy-dns ip enable
proxy-dns ip request both

ipv6 access-list block-list deny ip src any dest any
ipv6 access-list dhcpv6-list permit udp src any sport any dest any dport eq 546
ipv6 access-list dhcpv6-list permit udp src any sport any dest any dport eq 547
ipv6 access-list icmpv6-list permit icmp src any dest any
ipv6 access-list tunnel-list permit 4 src any dest any
ipv6 access-list other-list permit ip src any dest any
ipv6 access-list dynamic cache 65535
ipv6 access-list dynamic dflt-list access other-list

ip access-list reject-outgoing deny udp src any sport eq 135 dest any dport any
ip access-list reject-outgoing deny udp src any sport any dest any dport eq 135
ip access-list reject-outgoing deny tcp src any sport eq 135 dest any dport any
ip access-list reject-outgoing deny tcp src any sport any dest any dport eq 135
ip access-list reject-outgoing deny udp src any sport eq 445 dest any dport any
ip access-list reject-outgoing deny udp src any sport any dest any dport eq 445
ip access-list reject-outgoing deny tcp src any sport eq 445 dest any dport any
ip access-list reject-outgoing deny tcp src any sport any dest any dport eq 445
ip access-list reject-outgoing deny ip src any dest 10.0.0.0/8
ip access-list reject-outgoing deny ip src any dest 172.16.0.0/12
ip access-list reject-outgoing deny ip src any dest 192.168.0.0/16
ip access-list reject-outgoing permit ip src any dest any

ip access-list local-filter deny ip src any dest 10.0.0.0/8
ip access-list local-filter deny ip src any dest 172.16.0.0/12
ip access-list local-filter deny ip src any dest 192.168.0.0/16
ip access-list local-filter permit ip src any dest any

route-map pppoe-route permit 10
  match ip address access-list local-filter
  set default interface GigaEthernet0.1
  set interface GigaEthernet0.1

ip dhcp profile dhcpv4-sv
  dns-server 10.168.6.1
  

ipv6 dhcp client-profile dhcpv6-cl
  information-request
  option-request dns-servers

ipv6 dhcp server-profile dhcpv6-sv
  dns-server dhcp

ppp profile ppp_profile
  authentication myname hoge@fuga.com
  authentication password hoge@fuga.com password

interface GigaEthernet0.0
  no ip address
  ipv6 enable
  ipv6 address autoconfig receive-default
  ipv6 dhcp client dhcpv6-cl
  ipv6 filter dhcpv6-list 1 in
  ipv6 filter icmpv6-list 2 in
  ipv6 filter tunnel-list 3 in
  ipv6 filter block-list 100 in
  ipv6 filter dhcpv6-list 1 out
  ipv6 filter icmpv6-list 2 out
  ipv6 filter tunnel-list 3 out
  ipv6 filter dflt-list 100 out
  no shutdown

interface GigaEthernet0.1
  ppp binding ppp_profile
  ip address ipcp
  ip napt enable
  ip tcp adjust-mss auto
  no shutdown
  ip napt service http 10.168.0.80 none tcp 80
  ip napt service softether 10.168.0.30 none tcp 5555
  ip filter reject-outgoing 1 out

interface GigaEthernet1.0
  ip address 10.168.7.254/24
  no shutdown

device GigaEthernet2
  vlan-group 1 port 1 2 3 4
  vlan-group 2 port 5 6 7 8

interface GigaEthernet2:1.0
  ip address 10.168.0.254/24
  ip policy route-map pppoe-route
  no shutdown

interface GigaEthernet2:2.0
  ip address 10.168.6.1/24
  no shutdown

interface Tunnel0.0
  tunnel mode map-e
  ip address map-e
  ip tcp adjust-mss auto
  ip napt enable
  ip filter reject-outgoing 1 out
  no shutdown

ハマりやすいところとしては、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など、ポート数が少ない機種で試す場合はインターフェース名などを適宜変更すれば動くかもしれません。