外へのインターネット接続を、いい加減PPPoE方式による接続から、MAP-E方式による接続に切り替えたいと思っていたところ、思わぬ形でNECのIX2215というルーターをゲットしましたので早速やってみました。
my new gear pic.twitter.com/rHFfgT33q3
— Y.Tsurui (@tsuruiy) May 9, 2021
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側に流れてしまうのでこれまた失敗となってしまいます。
ルーター交換工事だいたい完了。
— Y.Tsurui (@tsuruiy) May 16, 2021
旧ルーターはお役御免になったのと同時に、跡地に去年末に買って放置してたサーバーが入居。
旧ルーター、欲しい人が居たら売りつけてしまおうか… pic.twitter.com/nOZ5smt2Bn
結果的にこのようになり、安定して稼働しております。
上記の設定に更に追加で、ポートベースVLANの上にタグVLANも乗っけて動くように構成してあります。
IX2105やIX2106など、ポート数が少ない機種で試す場合はインターフェース名などを適宜変更すれば動くかもしれません。