転載・引用について

ユーザ用ツール

サイト用ツール


tweet:2023:1015_01

CiscoとVMwareとFreeBSD CARP

某所で少し変な挙動を見かけたので、ちょっと手元の環境で再現試験。 結果を先に書くと、再現しなかったんだけど、環境構築から試験まで色々やったので、ここにまとめておく。

試験環境

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
    • 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設定
  • 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

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

なお、HSRP Configurationは

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

テスト内容

  • 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が同じでも異なっていても問題はなかった
  • 認証の影響もなかった
このウェブサイトはクッキーを使用しています。 Webサイトを使用することで、あなたはあなたのコンピュータにクッキーを保存することに同意します。 また、あなたはあなたが私たちのプライバシーポリシーを読んで理解したことを認めます。 同意しない場合はウェブサイトを離れてください。クッキーに関する詳細情報
tweet/2023/1015_01.txt · 最終更新: 2023/10/16 11:36 by seirios

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki