転載・引用について

ユーザ用ツール

サイト用ツール


tweet:2023:1015_01

差分

このページの2つのバージョン間の差分を表示します。


tweet:2023:1015_01 [2023/10/16 11:40] (現在) – 作成 - 外部編集 127.0.0.1
行 1: 行 1:
 +====== CiscoとVMwareとFreeBSD CARP ======
 +
 +某所で少し変な挙動を見かけたので、ちょっと手元の環境で再現試験。
 +結果を先に書くと、再現しなかったんだけど、環境構築から試験まで色々やったので、ここにまとめておく。
 +
 +===== 試験環境 =====
 +  * VMware ESXi 6.7 [[https://www.seirios.org/seirios/dokuwiki/doku.php?id=tech:vmware:6.7|VMware ESXi 6.7をInstallする]]
 +    * FreeBSD 14.0-Beta5
 +  * Cisco 2960X-48TD-L
 +
 +==== ESXiおよびFreeBSD設定 ====
 +
 +=== ESXi ===
 +  * vSwitchを2つ作成
 +
 +^  name    ^  MTU  ^  NIC   ^ 無差別 ^  偽装 ^ MAC ^
 +| Test-sw1 |  1500 | vmnic3 |  ✕    ✕    |  ✕  |
 +| Test-sw2 |  1500 | vmnic4 |  ✕    ✕    |  ✕  |
 +
 +  * PortGroupを2つ作成
 +
 +^  name    ^ vLAN ^  vSW     ^ 無差別 ^  偽装 ^ MAC ^
 +| test-pg1 |  601 | Test-sw1 |  ✕    ✕    |  ✕  |
 +| test-pg2 |  601 | Test-sw2 |  ✕    ✕    |  ✕  |
 +
 +言葉の定義 (VMware ESXi 6.7 のマニュアルより抜粋し編集)
 +  * MAC変更を許可
 +    * VMが受け取るトラフィックに影響を及ぼす
 +    * [承諾] ESXi は有効な MAC アドレスを初期 MAC アドレスとは異なるアドレスに変更する要求を受け入れる
 +    * [拒否] ESXi は有効な MAC アドレスを、初期 MAC アドレスとは異なるアドレスに変更する要求を拒否する
 +      * この設定により、MAC のなりすましに対してホストが保護される
 +      * 仮想マシンアダプタが要求の送信に使用したポートは無効になる
 +      * 仮想マシンアダプタは、有効な MAC アドレスが初期 MAC アドレスと一致しない限り、それ以上のフレームを受け取らない
 +      * ゲスト OS は、MAC アドレスの変更要求が拒否されたことを検知しない
 +  * 偽装転送を許可
 +    * VMから転送されるトラフィックに影響を及ぼす
 +    * [承諾] ESXi はソースと有効な MAC アドレスを比較しない
 +    * [拒否] ホストはゲスト OS から転送されるソース MAC アドレスと、その仮想マシンアダプタの有効な MAC アドレスを比較して、それらが一致するかどうかを確認する
 +      * アドレスが一致しない場合、ESXi ホストはパケットをドロップする
 +      * ゲスト OS は、仮想マシンアダプタが、なりすましている MAC アドレスを使用したパケットの送信を実行できないことは検知しない
 +      * ESXi ホストは、なりすましているアドレスのパケットが配信される前に、そのパケットを遮断する
 +      * ゲスト OS は、そのパケットがドロップされたとみなす可能性がある
 +  * 無差別モードを許可
 +    * 仮想マシンアダプタが実行するすべての受信フィルタリングが除去される
 +    * ゲスト OS は回線で監視されるすべてのトラフィックを受信する
 +
 +=== FreeBSD ===
 +FreeBSDは普通にInstall。
 +
 +  * ''/boot/loader.conf'' に以下を追加
 +    * ''carp_load="YES"''
 +  * ''/etc/rc.conf''
 +    * <code>
 +hostname="test-2" # 2号機は test-1
 +moused_nondefault_enable="NO"
 +# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
 +dumpdev="NO"
 +zfs_enable="YES"
 +sshd_enable="YES"
 +
 +vmware_guest_kmod_enable="YES"
 +vmware_guest_enable="YES"
 +
 +ifconfig_vmx0="inet xxx.xxx.xxx.xxx/mm -rxcsum -txcsum -tso -lro" # Management用
 +ifconfig_vmx1="inet 192.168.1.1/24 -rxcsum -txcsum -tso -lro" # 2号機は 192.168.1.2/24 を割り当てる
 +ifconfig_vmx1_alias0="inet vhid 1 advbase 1 advskew 100 pass 192.168.1.3 alias 192.168.1.3/32"
 + # CARP設定
 +</code>
 +
 +  * Installed package
 +    * ''pkg install doas open-vm-tools-nox11''
 +
 +  * おまけ
 +    * Multicast状態の確認には、''ifmcstat''コマンドを実行する。JoinしているGroupなどが確認できる。詳細は ''man ifmcstat'' を参照
 +      * ''ifmcstat -i vmx1'' など
 +    * CARPの状態変更には ''ifconfig [I/F name] vhid [VHID Number] state (master|backup)'' コマンドを利用する
 +      * ただし、advbase/advskewの値によっては、stateを変えられないことがある。その場合は、I/FをDownした数秒放置するしかない
 +
 +==== Cisco Configuration ====
 +<code>
 +version 15.2
 +no service pad
 +service tcp-keepalives-in
 +service tcp-keepalives-out
 +service timestamps debug datetime msec localtime
 +service timestamps log datetime msec localtime
 +service password-encryption
 +service sequence-numbers
 +service unsupported-transceiver
 +no service dhcp
 +!
 +hostname swc1
 +!
 +boot-start-marker
 +boot-end-marker
 +!
 +!
 +username seirios privilege 15 password 7 ******************
 +aaa new-model
 +!
 +aaa authentication login CONSOLE local-case
 +!
 +aaa session-id common
 +clock timezone JST 9 0
 +switch 1 provision ws-c2960x-48td-l
 +no ip source-route
 +ip routing
 +!
 +ip domain-name mgmt.example.com
 +ip name-server 8.8.8.8
 +ip name-server 8.8.4.4
 +vtp mode off
 +!
 +spanning-tree mode pvst
 +spanning-tree extend system-id
 +no spanning-tree vlan 1-4094
 +no errdisable detect cause gbic-invalid
 +!
 +vlan internal allocation policy ascending
 +!
 +vlan 601
 + name "Test1"
 +!
 +no cdp run
 +!
 +interface FastEthernet0
 + ip address XXX.XXX.XXX.XXX mmm.mmm.mmm.mmm
 + no ip route-cache
 +!
 +interface GigabitEthernet1/0/1
 +!
 +(snip)
 +!
 +interface GigabitEthernet1/0/45
 +!
 +interface GigabitEthernet1/0/46
 + switchport access vlan 601
 + switchport trunk allowed vlan 601
 + switchport mode trunk
 +!
 +interface GigabitEthernet1/0/47
 +!
 +interface GigabitEthernet1/0/48
 + switchport access vlan 602
 + switchport trunk allowed vlan 601
 + switchport mode trunk
 +!
 +interface GigabitEthernet1/0/49
 +!
 +interface GigabitEthernet1/0/50
 +!
 +interface TenGigabitEthernet1/0/1
 +!
 +interface TenGigabitEthernet1/0/2
 +!
 +interface Vlan1
 + no ip address
 + shutdown
 +!
 +interface Vlan601
 + ip address 192.168.1.254 255.255.255.0
 + ip information-reply
 + no ip route-cache
 +!
 +no ip http server
 +no ip http secure-server
 +!
 +ip route 0.0.0.0 0.0.0.0 xxx.xxx.xxx.xxx
 +ip ssh version 2
 +!
 +ip access-list extended MGMT
 + permit ip xxx.xxx.xxx.xxx mm.mm.mm.mm any
 +!
 +no vstack
 +configuration mode exclusive
 +!
 +line con 0
 + logging synchronous
 +line vty 0 4
 + access-class MGMT in
 + exec-timeout 0 0
 + privilege level 15
 + login authentication CONSOLE
 + exec prompt timestamp
 + transport preferred none
 + transport input telnet ssh
 +line vty 5 15
 + access-class MGMT in
 + exec-timeout 0 0
 + privilege level 15
 + login authentication CONSOLE
 + exec prompt timestamp
 + transport preferred none
 + transport input telnet ssh
 +!
 +ntp server ntp.nict.jp
 +end
 +</code>
 +
 +なお、HSRP Configurationは
 +
 +<code>
 +interface Vlan601
 + ip address 192.168.1.254 255.255.255.0
 + ip broadcast-address 192.168.1.255
 + ip information-reply
 + standby version 2
 + standby 1 ip 192.168.1.252
 + standby 1 priority 80
 + standby 1 authentication 12345678
 + no ip route-cache
 +</code>
 +
 +===== テスト内容 =====
 +  * ESXi上のvSwitch/PortGroupにおける「セキュリティ設定」とCARPの挙動の確認
 +    * CARPが正常に動くために必要な設定の明確化
 +  * VM <-> vSwitch <-> Cisco <-> vSwitch <-> VM でのCARPの挙動確認
 +    * HSRPがとCARPがCisco上で共存できるかの確認
 +
 +===== Test手順と結果 =====
 +
 +==== 同一PG内でのCARP 動作試験 ====
 +  * 2台のVMのNICをTest-pg1に接続し、表にあるようなPG Security設定をした上で、CARPの状態を確認、変更し、正しく切り替わるか確認する
 +
 +^ 無差別 ^ 偽装転送 ^ MAC変更 ^ 結果 ^ 備考 ^
 +|  ✕  |  ✕  |  ✕  |  ✕  | CARPは正しく動作しなかった。外からのICMPに返答もしない。 |
 +|  〇  |  〇  |  〇  |  〇  | CARPは正しく動作した |
 +|  ✕  |  〇  |  〇  |  ✕  | CARPのStateは正しく動作した(Master/Backupが正しく決定される)が、外部からのpingに対して返答しない |
 +|  〇  |  ✕  |  〇  |  ✕  | CARPは正しく動作しなかった。外からのICMPに返答もしない。 |
 +|  〇  |  〇  |  ✕  |  〇  | CARPは正しく動作した |
 +
 +=== 結論 ===
 +  * 無差別モードと偽装転送はPGレベルで承諾する必要がある。何かの影響があるのは望ましくないので、MAC変更も承諾しておいた方が無難
 +  * なお、vSwitchの設定よりもPGの設定の方が優先されるので、vSWの設定は気にしなくて良い
 +
 +==== 異なるPG間でのCiscoを経由したCARP動作試験 ====
 +  * test-1 の NIC を Test-pg1 に接続
 +  * test-2 の NIC を Test-pg2 に接続
 +  * **__ 注意 __** pg1/pg2の設定が正しくないと、CARPは正しく動作しないので、Security 設定は全て「承諾」に設定すること
 +  * Cisco側でHSRPをOn/Offして試験を行う
 +
 +^ HSRP ^ Group ^ auth ^ 結果 ^ 備考 ^
 +|  ✕  |  ✕  |  ✕  |  〇  | |
 +|  〇  | 10  |  ✕  |  〇  | |
 +|  〇  | 10  |  〇  |  〇  | |
 +|  〇  | 1  |  〇  |  〇  | |
 +|  〇  | 1  |  ✕  |  〇  | |
 +
 +=== 結論 ===
 +  * Cisco 2960で試験した限りでは、HSRPは問題なく動作したと言える。
 +  * CARPのVHIDとHSRPのGroupが同じでも異なっていても問題はなかった
 +  * 認証の影響もなかった
 +
  
tweet/2023/1015_01.1697372939.txt.gz · 最終更新: 2023/10/15 21:30 (外部編集)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki