JANOG 53 NETCON 問題解説 Level2-5
JANOG 53 にスタッフ(NETCON委員)として参加させていただきました。
作成した問題について、回答と解説を記載します。
Level2-5 DHCPリレー問題
技術要素
・DHCP Relay(ACL)
構成解説
・CSR1000v x 3, Linux x 1
問題文
PC1はR2からDHCPによってIPアドレスを取得します。
IPアドレスの取得がうまくいきません。
以下のようにPC1がDHCPでIPアドレスを取得できるようにしてください。
(取得するIPアドレスはレンジ内であれば不問です)
PC1:~# udhcpc -i eth1
udhcpc: started, v1.36.0
udhcpc: broadcasting discover
udhcpc: broadcasting select for 192.168.10.103, server 192.168.20.100
udhcpc: lease of 192.168.10.103 obtained from 192.168.20.100, lease time 86400
制約 ・R2によってDHCPでIPアドレスを払い出す必要があります。
R1/FWをDHCPサーバ/DHCPクライアントにしてはいけません。
・FWは、DHCPリレーエージェント:192.168.10.1 が DHCPサーバ:192.168.20.100 宛に送信するDHCPリレーのパケットのみ通過させ、
それ以外のUDPパケットをフィルタする必要があります。
・FWでは、既存の設定を削除したり、ACLの適用を無効化してはいけません。新たな設定を追加してもいけません。
必ず設定内容の変更で対応してください。
例:ACL100 seq 10 の設定を削除→×、ACL100 seq 5 を追加→×
ACL100 seq 10 の設定を修正→〇
・新たなインターフェースを作成したり、PBRを設定してはいけません。
問題解説 PC1でIPアドレスを取得してみます。
PC1:~# udhcpc -i eth1 udhcpc: started, v1.36.0 udhcpc: broadcasting discover udhcpc: broadcasting discover udhcpc: broadcasting discover udhcpc: broadcasting discover udhcpc: broadcasting discover udhcpc failed to get a DHCP lease ^C |
取得に失敗しています。
構成的に、R1にはDHCPリレーの設定が必要になります。
R1のインターフェースの状態と設定を確認してみます。
R1#sh ip int g4 GigabitEthernet4 is up, line protocol is up Internet address is 192.168.10.1/24 Broadcast address is 255.255.255.255 Address determined by setup command MTU is 1500 bytes Helper address is 192.168.20.1 (略) R1#sh run int g4 Building configuration... Current configuration : 153 bytes ! interface GigabitEthernet4 ip address 192.168.10.1 255.255.255.0 ip helper-address 192.168.20.1 |
helper-address に 192.168.20.1 (FW) のIPアドレスが設定されてしまっています。
hepler-address を 192.168.20.100 (R2) に修正します。
R1
interface GigabitEthernet4 no ip helper-address 192.168.20.1 ip helper-address 192.168.20.100 |
R1#sh run int g4 Building configuration... Current configuration : 155 bytes ! interface GigabitEthernet4 ip address 192.168.10.1 255.255.255.0 ip helper-address 192.168.20.100 |
R1はR2にユニキャストで DHCP discover を転送する必要があるため、IPの疎通性があるか、ping で確認してみます。
R1#ping 192.168.20.100 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 192.168.20.100, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/11/51 ms |
大丈夫のようなので、もう一度IPアドレスを取得してみます。
PC1:~# udhcpc -i eth1 udhcpc: started, v1.36.0 udhcpc: broadcasting discover udhcpc: broadcasting discover udhcpc: broadcasting discover ^C |
まだ取得できません。
R1から転送された DHCP discover がR1/R2まで届いているか、debug ip dhcp server packet で確認してみます。
R1#debug ip dhcp server packet DHCP server packet debugging is on. R1#term monitor R2#debug ip dhcp server packet DHCP server packet debugging is on. R2#term monitor PC1:~# udhcpc -i eth1 udhcpc: started, v1.36.0 udhcpc: broadcasting discover udhcpc: broadcasting discover udhcpc: broadcasting discover ^C R1# *Dec 25 04:15:16.690: Option 82 not present *Dec 25 04:15:16.690: DHCPD: tableid for 192.168.10.1 on GigabitEthernet4 is 0 *Dec 25 04:15:16.690: DHCPD: client's VPN is . *Dec 25 04:15:16.690: DHCPD: No option 125 *Dec 25 04:15:16.690: DHCPD: No option 124 *Dec 25 04:15:16.690: DHCPD: Option 125 not present in the msg. *Dec 25 04:15:16.690: Option 82 not present *Dec 25 04:15:16.690: Option 82 not present *Dec 25 04:15:16.690: DHCPD: Option 125 not present in the msg. *Dec 25 04:15:16.690: DHCPD: Looking up binding using address 192.168.10.1 *Dec 25 04:15:16.690: DHCPD: setting giaddr to 192.168.10.1. *Dec 25 04:15:16.691: DHCPD: BOOTREQUEST from 01aa.c1ab.e4a4.32 forwarded to 192.168.20.100 R2# (何も表示されず) |
R1は、リレー先である 192.168.20.100 に転送した内容のメッセージが表示されますが、
R2に何も表示されないので、R2までDHCP discover が届いていない可能性があります。
R1とR2の間にあるFWの設定を確認してみます。
FW#sh run | sec access ip access-group 100 in ip access-list extended 100 10 permit udp host 192.168.10.1 eq bootpc host 192.168.20.100 eq bootps 20 deny udp any any 30 permit ip any any
FW#sh run int g4 Building configuration... Current configuration : 143 bytes ! interface GigabitEthernet4 ip address 172.16.0.1 255.255.255.0 ip access-group 100 in negotiation auto
FW#show access-lists 100 Extended IP access list 100 10 permit udp host 192.168.10.1 eq bootpc host 192.168.20.100 eq bootps 20 deny udp any any (55 matches) 30 permit ip any any (462 matches) |
FWのG4では ACL100 がIN方向に適用されています。
もう一度IPアドレスの取得を試みます。
PC1:~# udhcpc -i eth1 udhcpc: started, v1.36.0 udhcpc: broadcasting discover udhcpc: broadcasting discover ^C FW#show access-lists 100 Extended IP access list 100 10 permit udp host 192.168.10.1 eq bootpc host 192.168.20.100 eq bootps 20 deny udp any any (66 matches) 30 permit ip any any (483 matches) |
ACL100 の seq 20 がカウントアップするので、ここでフィルタされている可能性があります。
ACL100 の seq 10 をよく見ると、Src Port が bootpc (68) になっています。
FW#sh run | sec access ip access-group 100 in ip access-list extended 100 10 permit udp host 192.168.10.1 eq bootpc host 192.168.20.100 eq bootps 20 deny udp any any 30 permit ip any any FW(config-ext-nacl)#10 permit udp any eq ? <0-65535> Port number biff Biff (mail notification, comsat, 512) bootpc Bootstrap Protocol (BOOTP) client (68) bootps Bootstrap Protocol (BOOTP) server (67) discard Discard (9) dnsix DNSIX security protocol auditing (19 |
通常の DHCP Client からの パケットは SrcPort:68、DstPort:67 ですが、
DHCPリレーエージェントによってリレーされるパケットは SrcPort:67、DstPort:67 となるので
ACLの許可設定でSrcPortを修正する必要があります。
ACLを修正します。
FW ip access-list extended 100 no 10 10 permit udp host 192.168.10.1 eq bootps host 192.168.20.100 eq bootps |
FW#sh access-lists 100 ip access-group 100 in ip access-list extended 100 10 permit udp host 192.168.10.1 eq bootps host 192.168.20.100 eq bootps 20 deny udp any any 30 permit ip any any |
再度PC1でIP取得を試みます。
PC1:~# udhcpc -i eth1 udhcpc: started, v1.36.0 udhcpc: broadcasting discover udhcpc: broadcasting select for 192.168.10.100, server 192.168.20.100 udhcpc: lease of 192.168.10.100 obtained from 192.168.20.100, lease time 86400
FW#show access-lists 100 Extended IP access list 100 10 permit udp host 192.168.10.1 eq bootps host 192.168.20.100 eq bootps (2 matches) 20 deny udp any any (67 matches) 30 permit ip any any (499 matches)
R2# *Dec 14 09:32:17.082: Option 82 not present *Dec 14 09:32:17.082: Option 82 not present *Dec 14 09:32:17.082: DHCPD: Option 125 not present in the msg. *Dec 14 09:32:17.082: DHCPD: Selecting relay q from pool *Dec 14 09:32:17.082: DHCPD: Attempt ping to check address available *Dec 14 09:32:17.082: DHCPD: Saving workspace (ID=0xE1000004) *Dec 14 09:32:17.082: DHCPD: New packet workspace 0x7FCD1FD53BE0 (ID=0x5D000005)
R2#show ip dhcp binding Bindings from all pools not associated with VRF: IP address Client-ID/ Lease expiration Type State Interface Hardware address/ User name 192.168.10.100 01aa.c1ab.e4a4.32 Dec 26 2023 04:46 AM Automatic Active GigabitEthernet3 |
PC1へのIPアドレス割り当てに成功しました。
正解例
R1 interface GigabitEthernet4 no ip helper-address 192.168.20.1 ip helper-address 192.168.20.100 |
FW ip access-list extended 100 no 10 10 permit udp host 192.168.10.1 eq bootps host 192.168.20.100 eq bootps |
以下は制約事項に違反するので不正解になります。
・R1/FWをDHCPサーバにする
・FWのG4へのACL100の適用を無効化する
・ACL100自体を削除する
・ACL100 の 許可設定を 10 permit udp any any のように設定する 初期config
R1
hostname R1 no ip domain lookup
interface GigabitEthernet3 no shutdown ip address 172.16.0.10 255.255.255.0
interface GigabitEthernet4 no shutdown ip address 192.168.10.1 255.255.255.0 ! ip helper-address 192.168.20.100 ip helper-address 192.168.20.1
router ospf 1 passive-interface g4 network 172.16.0.0 0.0.0.255 area 0 network 192.168.10.0 0.0.0.255 area 0 |
R2
hostname R2 no ip domain lookup
ip dhcp excluded-address 192.168.10.1 192.168.10.99
ip dhcp pool NET1 network 192.168.10.0 255.255.255.0 default-router 192.168.10.1
interface GigabitEthernet3 no shutdown ip address 192.168.20.100 255.255.255.0
router ospf 1 network 192.168.20.0 0.0.0.255 area 0 |
FW
hostname FW no ip domain lookup
interface GigabitEthernet3 no shutdown ip address 192.168.20.1 255.255.255.0
interface GigabitEthernet4 no shutdown ip address 172.16.0.1 255.255.255.0 ip access-group 100 in
router ospf 1 network 192.168.20.0 0.0.0.255 area 0 network 172.16.0.0 0.0.0.255 area 0
ip access-list extended 100 ! 10 permit udp host 192.168.10.1 eq bootps host 192.168.20.100 eq bootps 10 permit udp host 192.168.10.1 eq bootpc host 192.168.20.100 eq bootps 20 deny udp any any 30 permit ip any any |
Comments