PPPoE LAN型払い出し設定

よくあるフレッツ系回線収容するときにPPPoE IP8で契約してルータなりFWなりで受ける構成を組むときのメモ。IOSはそれなりにやっているから良いとして,SRXやFortigateで最近構築することがあるのでメモを残す。

LAN払い出し型の場合,ルータ単体では実装は難しい(というか無理)なようで別途RADIUSサーバを準備する必要がある。(TACACS+でもいけるかなと思ったが,RAIDUSの「Framed-IP-Address/Framed-IP-Netmask」に該当するものが見当たらなかったので素直にFreeradiusをDebianに入れることにした。)

FreeRADIUS準備

Debian10にfreeradiusを入れる。公式を見ると4.0はめちゃくちゃ面倒だからただ使いなら3.xつかえとあったのでそれに従う。

参考) https://networkradius.com/packages/#fr32-debian-buster

# apt install freeradius -y

結構時間がかかるけれど,これで完了。次にclient.confの編集。

# vi /etc/freeradius/3.0/client.conf
# 以下追加
client 192.168.1.3 {                         # PPPoEサーバのIPアドレス
        secret = secret-key                  # 認証用Key
}

続いてPPP認証用のユーザ設定。

# vi /etc/freeradius/3.0/user
# 以下追加
radius-user Cleartext-Password := "rad-secret"
        Service-Type = Framed-User,
        Framed-Protocol = PPP,
        Framed-IP-Address = 10.10.10.1,
        Framed-IP-Netmask = 255.255.255.248

RADIUS再起動。

# systemctl restart freeradius

PPPoEサーバ準備

次にIOS XE17系でPPPoEサーバの準備。(以下抜粋)

radius server FreeRadius
 address ipv4 <radiusのIP> auth-port 1812 acct-port 1813
 key secret-key
!
aaa new-model
!
!
aaa group server radius PPPoE
 server name FreeRadius
 ip radius source-interface GigabitEthernet0/4
!

aaa authentication ppp default group PPPoE
aaa authorization network default group PPPoE
aaa accounting network default start-stop group PPPoE
!

bba-group pppoe FLETS
 virtual-template 1
!
interface Loopback1
 ip address 172.17.1.1 255.255.255.0
!
interface GigabitEthernet1                   # RADIUSサーバと通信するIF
 ip address 192.168.1.3 255.255.255.0
 duplex auto
 speed auto
!
interface GigabitEthernet3                   # PPPoE接続用IF
 no ip address
 duplex auto
 speed auto
 pppoe enable group FLETS
!
interface Virtual-Template1
 mtu 1454
 ip unnumbered Loopback1
 ppp authentication chap
!

PPPoEクライアント設定

IOS 15.x系

interface GigabitEthernet0/0
 no ip address
 pppoe enable group global
 pppoe-client dial-pool-number 1
!
interface GigabitEthernet0/1
 ip address 10.10.10.1 255.255.255.248
!
interface Dialer0
 ip unnumbered GigabitEthernet0/1
 encapsulation ppp
 dialer pool 1
 dialer-group 1
 ppp authentication chap callin
 ppp chap hostname radius-user
 ppp chap password 0 rad-secret
!
ip route 0.0.0.0 0.0.0.0 Dialer0
!
dialer-list 1 protocol ip permit

JUNOS

このまんま。

set interfaces ge-0/0/0 unit 0 encapsulation ppp-over-ether
set interfaces ge-0/0/1 unit 0 family inet address 10.10.10.1/29
set interfaces fxp0 unit 0
set interfaces pp0 unit 1 ppp-options chap default-chap-secret "$9$eZBMxdbwgZGiN-kP5Q9CuO1Ervx7V2oG"
set interfaces pp0 unit 1 ppp-options chap local-name radius-user
set interfaces pp0 unit 1 ppp-options chap passive
set interfaces pp0 unit 1 pppoe-options underlying-interface ge-0/0/0.0
set interfaces pp0 unit 1 pppoe-options auto-reconnect 10
set interfaces pp0 unit 1 pppoe-options client
set interfaces pp0 unit 1 family inet unnumbered-address ge-0/0/1.0
set routing-options static route 0.0.0.0/0 next-hop pp0.1

Fortigate

WANのインタフェースにネットワークアドレス部分を入れないと駄目のようで,設定上気持ちが悪い。(が仕方が無いらしい)

system_interface:
    - wan:
        vdom: "FG-traffic"
        mode: pppoe
        allowaccess: ping
        type: physical
        lldp-reception: disable
        role: wan
        snmp-index: 1
        ipunnumbered: 10.10.10.0
        username: "radius-user"
        pppoe-unnumbered-negotiate: disable
        password: ENC xxxx
    - internal:
        vdom: "FG-traffic"
        ip: 10.10.10.1 255.255.255.248
        allowaccess: ping
        type: hard-switch
        device-identification: enable
        lldp-reception: disable
        lldp-transmission: disable
        role: lan
        snmp-index: 10

なお,PPPoEではないが,この構成でIPSecを行う際に送信元IPの指定がGUIでは「Local ID」しか設定することができず,CLIで「localid-type」を「address」に指定しないとPhase1の認証がこける。ここでハマって1日費やした。

no ip domain-lookupからの卒業

Smart Licenseのおかげでスイッチにおいてもip domain-lookupの設定が必要になった。(環境によりけりが,インターネットダイレクト構成では少なくとも必要)

これを入れるとコマンド打ち間違えの時にdomain-lookupが発動してしまい,暫しご歓談をタイムに陥ってしまう。ミスタイプなどしないS級エンジニアや,「少しくらいの時間ならお茶を飲みながら待ちますよ」という賢者ならまだしも,ミスタイプをしょっちゅうするし少しの待ち時間ももったいない私にとっては致命的。

ということで方法はないかと調べてみると,あったのねこんな所に

“no ip domain-lookup”の代わりに”transport preferred none”

http://blog.livedoor.jp/tokyo_z/archives/51247251.html

間違えたコマンド入力を名前解決をしない方法

http://networkerslog.blog137.fc2.com/blog-entry-335.html

Transport preferred

https://community.cisco.com/t5/switching/transport-preferred/td-p/1612979

オフィシャルサイトでは以下のように説明がある。IOS XRだけど,基本同じだろう。

Cisco IOS XR ソフトウェア は、認識できないコマンドはすべてホスト名であるものと想定し、接続を試みます。 プロトコルが none に設定されている場合、システムは EXEC プロンプトで入力された認識できないコマンドを無視し、接続を試みません。

https://www.cisco.com/c/ja_jp/td/docs/rt/servprovideredgert/asr9000aggregationservsrt/cr/035/b_sysman_cr42asr9k/b_sysman_cr42asr9k_chapter_010010.html#wp2132003449

何かの名残でこのような設定になっているのかな。ちなみにIOS XRではデフォルト無効になっているそうだ。IOSやIOS XEでも同じくデフォルト無効にして欲しい。

以下設定コマンド。これでコマンド以外の文字列が入力されてもlookupが走らない(正確にはtelnetコマンドが実行されない)。

line con 0
 transport preferred none
line vty 0 4
 transport preferred none