こっちの記事見た方がわかりやすい。
構成
サーバ|.1 —–.10 gi0/1 |iosv-1| gi0/0 .1——.20| iosvl2-0|
コンフィグ
- サーバ側がoutside, iosvl2-0側がinside
- サーバ-iosv-1間:192.168.255.0/24
- iosv-1-iosvl2-0間:192.168.10.0/24
ip nat inside source
inside→outsideで通信する際の、送信元を書き換えるSNATと呼ばれるもの(のはず)。
iosv-1#sh run | s NAT
ip nat pool NAT-Pool 169.254.100.1 169.254.100.15 netmask 255.255.255.240
ip nat inside source list NAT-inside pool NAT-Pool
ip access-list standard NAT-inside
permit 192.168.0.0 0.0.255.255
ping実行(inside→outside)
先にまとめ
- inside側から発信された時の送信元IPアドレスが変換される
- つまりSNAT(おそらく)
- サーバ側は送信元のIPアドレスを知っている必要はない
- insideの送信元はサーバ側のIPアドレスを知っている必要がある
debug ip nat
*Jan 14 15:15:12.015: NAT*: s=192.168.10.20->169.254.100.3, d=192.168.255.1 [70]
*Jan 14 15:15:12.019: NAT*: s=192.168.255.1, d=169.254.100.3->192.168.10.20 [28265]
*Jan 14 15:15:12.217: NAT*: s=192.168.10.20->169.254.100.3, d=192.168.255.1 [71]
*Jan 14 15:15:12.222: NAT*: s=192.168.255.1, d=169.254.100.3->192.168.10.20 [28278]
*Jan 14 15:15:12.372: NAT*: s=192.168.10.20->169.254.100.3, d=192.168.255.1 [72]
*Jan 14 15:15:12.378: NAT*: s=192.168.255.1, d=169.254.100.3->192.168.10.20 [28287]
*Jan 14 15:15:12.401: NAT*: s=192.168.10.20->169.254.100.3, d=192.168.255.1 [73]
*Jan 14 15:15:12.405: NAT*: s=192.168.255.1, d=169.254.100.3->192.168.10.20 [28291]
iosv-1#
*Jan 14 15:15:12.426: NAT*: s=192.168.10.20->169.254.100.3, d=192.168.255.1 [74]
*Jan 14 15:15:12.432: NAT*: s=192.168.255.1, d=169.254.100.3->192.168.10.20 [28292]
show ip nat translation
iosv-1#sh ip nat translation
Load for five secs: 11%/0%; one minute: 11%; five minutes: 9%
Time source is hardware calendar, *15:15:24.208 UTC Sun Jan 14 2024
Pro Inside global Inside local Outside local Outside global
icmp 169.254.100.3:14 192.168.10.20:14 192.168.255.1:14 192.168.255.1:14
--- 169.254.100.3 192.168.10.20 --- ---
パケットキャプチャ
ping実行(outside→inside)
先にまとめ
- Echo Requestにて、変換されていないけどshow ip nat translationに載る
- Echo Requestは宛先が変換前のアドレスだけど、Echo Reply時には送信元が変換後になる
debug ip nat
*Jan 15 00:26:31.894: NAT*: s=192.168.10.20->169.254.100.3, d=192.168.255.1 [236]
*Jan 15 00:26:32.819: NAT*: s=192.168.10.20->169.254.100.3, d=192.168.255.1 [321]
iosv-1#
*Jan 15 00:26:33.637: NAT*: s=192.168.10.20->169.254.100.3, d=192.168.255.1 [445]
*Jan 15 00:26:34.523: NAT*: s=192.168.10.20->169.254.100.3, d=192.168.255.1 [647]
iosv-1#
*Jan 15 00:26:35.439: NAT*: s=192.168.10.20->169.254.100.3, d=192.168.255.1 [790]
show ip nat translation
iosv-1#show ip nat translation
Load for five secs: 14%/0%; one minute: 9%; five minutes: 7%
Time source is hardware calendar, *00:26:43.729 UTC Mon Jan 15 2024
Pro Inside global Inside local Outside local Outside global
icmp 169.254.100.3:36 192.168.10.20:36 192.168.255.1:36 192.168.255.1:36
--- 169.254.100.3 192.168.10.20 --- ---
パケットキャプチャ
ping実行(outside→inside変換後)
先にまとめ
- debug にはひっかからない
- Unreachableで返ってくる、タイムアウトとはならない
- なぜか169.254.100.1宛に送って169.254.100.3からUnreachableが届く
ping
show ip nat translation
iosv-1#sh ip nat trans
Load for five secs: 0%/0%; one minute: 8%; five minutes: 8%
Time source is hardware calendar, *00:54:10.435 UTC Mon Jan 15 2024
Pro Inside global Inside local Outside local Outside global
--- 169.254.100.3 192.168.255.10 --- ---
余談
SVをSNMPマネージャとして動かしたままNATの検証をしていたところ、SNMPパケットもNAT変換されていることを確認。
そらパケットが通ったんだから変換するのは当たり前なんだけど、管理系パケットって忘れがちだからこういう時に気付けると目から鱗な気分になる。
iosv-1#
*Jan 14 15:19:34.327: NAT: s=192.168.255.10->169.254.100.2, d=192.168.217.128 [43]
*Jan 14 15:19:37.129: NAT: s=192.168.255.1, d=169.254.100.2->192.168.255.10 [7113]
iosv-1#
iosv-1#sh ip nat translations
Load for five secs: 1%/0%; one minute: 15%; five minutes: 10%
Time source is hardware calendar, *15:19:54.784 UTC Sun Jan 14 2024
Pro Inside global Inside local Outside local Outside global
--- 169.254.100.3 192.168.10.20 --- ---
udp 169.254.100.2:53128 192.168.255.10:53128 192.168.217.128:162 192.168.217.128:162
--- 169.254.100.2 192.168.255.10 --- ---
iosv-1#