목차/08. 고급 기능·절차

08고급 기능·절차고급 기능·절차

기본 클러스터를 세운 뒤에는, 실제 운영 환경의 까다로운 조건에 맞춰 클러스터를 더 정교하게 다듬는 작업이 필요해집니다. 이 장은 ClusterXL의 고급 기능을 하나도 빠짐없이 다룹니다 — 페일오버 때 ARP를 매끄럽게 처리하는 Virtual MAC, 클러스터에서의 VPN·NAT·VLAN 동작, 인터페이스를 묶는 Bond·Group of Bonds, 동기화 타이머와 부하 차단 같은 커널 파라미터 튜닝, 다른 서브넷의 클러스터 IP, 멤버 추가·제거, ISP 이중화, 그리고 클러스터에서의 동적 라우팅까지. 각 기능이 무엇을 위한 것인지, 어떤 한계가 있는지, 그리고 명령줄·SmartConsole에서 정확히 어떻게 설정하는지를 순서대로 풀어 둡니다.

Virtual MAC(VMAC) 구성

왜 VMAC이 필요한가 — G-ARP의 한계

대부분의 스위치는 네트워크에 연결된 호스트 정보를 ARP Request·ARP Reply 로부터 배웁니다. ClusterXL은 이 동작에 기대어, 클러스터 인터페이스에서 연결된 네트워크로 Gratuitous ARP Request(G-ARP 갱신) 를 보냅니다. 그러면 스위치·호스트·라우터가 자기 ARP 테이블을 갱신해 Cluster Virtual IP(VIP)와 그에 대응하는 MAC 주소 를 학습합니다.

Check Point 클러스터에서 G-ARP가 어떻게 동작하는지 정리하면 이렇습니다.

  • ClusterXL High Availability 모드 — 현재 Active 멤버가 자신의 VIP와 그에 대응하는 MAC 주소(Active 멤버 클러스터 인터페이스의 실제 MAC)에 대해 G-ARP를 보냅니다. 페일오버가 일어나면, 새 Active 멤버가 자신의 실제 MAC 으로 VIP에 대한 G-ARP를 다시 보냅니다.
  • ClusterXL Load Sharing Unicast 모드 — 현재 Pivot 멤버가 자신의 VIP와 실제 MAC으로 G-ARP를 보내고, 페일오버 후에는 새 Pivot 멤버가 자신의 실제 MAC으로 다시 보냅니다.

문제는 스위치·호스트 쪽 에서 생깁니다.

  • 일부 Layer 3 스위치 는 G-ARP 갱신을 ARP 캐시에 충분히 빨리 반영하지 못해, 페일오버 후에도 한동안 장애 난 옛 Active/Pivot 멤버의 실제 MAC 으로 트래픽을 계속 보냅니다. 스위치가 ARP 캐시를 갱신할 때까지 트래픽 단절이 일어납니다.
  • 멤버에 Static NAT 항목이 아주 많으면, 페일오버 때 ClusterXL이 G-ARP를 한꺼번에 대량으로 보냅니다. 스위치가 감당하지 못해 일부 트래픽이 유실되기도 합니다.
  • VoIP 전화기 같은 일부 장비는 이 G-ARP 갱신을 아예 무시 합니다.

Check Point의 해법 — VMAC 모드

이런 스위치를 다루려면, Cluster Member가 클러스터 인터페이스의 G-ARP 갱신에서 실제 MAC 대신 Virtual MAC(VMAC) 주소 를 쓰도록 구성하면 됩니다. 이러면 그런 "똑똑한" 스위치는 ARP 캐시를 갱신할 필요가 없습니다.

클러스터 객체에서 VMAC 모드를 켜면, 모든 Cluster Member가 자기 VIP에 대해 VMAC 주소를 출발지로 한 G-ARP 를 보냅니다. 각 멤버는 VIP마다 하나의 VMAC 을 만듭니다.

예를 들어 보겠습니다.

  • Member_A의 인터페이스 eth0(실제 MAC "A")은 서브넷 192.168.3.x/24에 있습니다.
  • Member_B의 인터페이스 eth0(실제 MAC "B")도 같은 서브넷에 있습니다.
  • 이 서브넷의 Cluster VIP는 192.168.3.1 입니다.
  • VMAC 모드를 켜면, 모든 멤버가 VIP 192.168.3.1에 대해 eth0용으로 만들어진 똑같은 출발지 VMAC 으로 G-ARP를 보냅니다.

이렇게 하면 페일오버 때 NAT된 IP 주소에 대한 G-ARP 갱신이 불필요해져, 트래픽 단절 가능성이 줄어 듭니다.

Active/Pivot 멤버에서 나가는 트래픽의 출발지 주소는 이렇습니다.

주소
Layer 2 출발지(MAC) 주소해당 Cluster Member 인터페이스의 실제 MAC 주소
Layer 3 출발지(IP) 주소해당 클러스터 인터페이스에 구성된 Virtual IP 주소

네트워크의 호스트가 Cluster Member 쪽으로 보내는 트래픽의 주소는 이렇습니다.

주소
Layer 2 출발지(MAC) 주소해당 호스트 인터페이스의 실제 MAC 주소
Layer 2 목적지(MAC) 주소해당 클러스터 인터페이스용으로 만든 Virtual MAC 주소
Layer 3 출발지(IP) 주소해당 호스트 인터페이스의 IP 주소
Layer 3 목적지(IP) 주소해당 클러스터 인터페이스에 구성된 Virtual IP 주소

VMAC 모드의 알려진 제약

  • VMAC 모드는 ClusterXL에서는 High Availability 모드와 Load Sharing Unicast 모드에서만 지원됩니다.
  • VSX Cluster에서는 High Availability(기본 모드)Virtual System Load Sharing(VSLS) 모드에서 지원됩니다.
  • Gaia Clish의 show interface 명령은 VMAC 주소를 보여 주지 않습니다. 대신 다음을 쓰세요.
  show cluster members interfaces virtual
  
  • Expert mode의 ifconfig 명령도 VMAC 주소를 보여 주지 않습니다. 대신 다음을 쓰세요.
  cphaprob -a if
  

VMAC 모드 켜기

VMAC 모드는 SmartConsole 에서 구성하며, 각 멤버의 명령줄에서도 제어할 수 있습니다.

SmartConsole에서 구성:

  1. SmartConsole에서 클러스터 객체를 엽니다.
  2. 왼쪽 트리에서 ClusterXL and VRRP 를 선택합니다.
  3. Select the cluster mode and configuration 아래에서 High Availability 를 선택합니다.
  4. High Availability 오른쪽 드롭다운에서 ClusterXL 을 선택합니다.
  5. Advanced Settings 아래에서 Use Virtual MAC 을 선택합니다.
  6. OK 를 클릭합니다.
  7. 클러스터 객체에 Access Control Policy를 설치합니다.

각 멤버 명령줄에서 구성(대안): 현재 커널 파라미터 값을 보려면 각 멤버에서 다음을 실행합니다.

fw ctl get int fwha_vmac_global_param_enabled
  1. VMAC 모드를 임시로 끄려면(재부팅하면 원복) 각 멤버에서 fwha_vmac_global_param_enabled 값을 0으로 설정합니다.
   fw ctl set int fwha_vmac_global_param_enabled 0
   
  1. 다시 켜려면 1로 설정합니다(기본값은 0).
   fw ctl set int fwha_vmac_global_param_enabled 1
   

VMAC 값은 어떻게 만들어지나

VMAC은 총 48비트이며, 왼쪽부터 다음과 같이 구성됩니다.

비트설명
첫 24비트고유한 상수 값00:1C:7F
다음 8비트VSX Virtual System ID. VSX Cluster에서는 Virtual System ID, 비-VSX Cluster에서는 00000000(위 설명대로)
마지막 16비트Management Server가 클러스터 객체마다 할당하는 고유 값. 관리되는 클러스터마다 VMAC이 유일해지도록 함클러스터마다 고유

VMAC 모니터링

  1. 각 Cluster Member 명령줄에 접속합니다.
  2. VMAC 주소를 보려면 다음을 실행하고 "VMAC address" 값을 확인합니다.
  • Gaia Clish:
     show cluster members interfaces virtual
     
  • Expert mode:
     cphaprob -a if
     
  1. 이 멤버에 연결된 호스트들의 ARP 테이블에 이제 VMAC 값이 들어 있는지 확인합니다. 호스트 OS에 맞는 명령을 쓰세요 — 예를 들어 Linux는 arp -an, Windows는 arp -a 입니다.

Same VMAC과 Silent Standby

VMAC 모드는 Gratuitous ARP 패킷에만 적용되고, 멤버가 트래픽을 전달할 때는 여전히 실제 MAC을 씁니다. 그런데 일부 Layer 3 스위치는 도착하는 트래픽의 출발지 IP·출발지 MAC 으로부터 호스트를 학습합니다. 그런 "똑똑한" 스위치에서 IP-MAC 연결이 자주 바뀌면, 스위치는 그 IP를 "수상한(rogue)" 주소로 간주해 ARP 갱신을 막고 현재 연결을 동결시킬 수 있습니다.

이러면 트래픽 단절이 생깁니다. 멤버들이 같은 출발지 IP 에서 트래픽을 보내지만 출발지 MAC이 다르기 때문입니다(G-ARP에서는 VMAC, 일반 트래픽에서는 실제 MAC).

해법은 Same VMAC 입니다. 같은 서브넷에 속한 클러스터 인터페이스들이 실제 MAC 대신 동일한 VMAC 을 쓰게 하면, 스위치는 항상 같은 출발지 IP·같은 출발지 MAC에서 오는 트래픽을 봅니다.

예: Member_1의 eth1과 Member_2의 eth1이 똑같은 VMAC 을 갖습니다.

Same VMAC의 알려진 제약:

  • ClusterXL High AvailabilityVSX VSLS 모드만 지원됩니다.
  • ClusterXL HA 객체에서 상태 동기화를 켜고 구성해야 합니다.
    1. ClusterXL and VRRP 페이지에서 Use State Synchronization 을 선택합니다.
    2. Network Management 페이지에서 Sync 인터페이스를 구성합니다.

Same VMAC과 Silent Standby 켜기

각 멤버 명령줄에서 Expert mode로 들어간 뒤 다음을 진행합니다.

  1. Same VMAC 기능을 켭니다.
   fw ctl set -f int fwha_alter_vmac_param 1
   
  1. Silent Standby 기능을 켭니다.
   fw ctl set -f int fwha_silent_standby_mode 1
   

a. 설정 파일이 있는지 확인합니다.

   ls -l $FWDIR/conf/cpha_link_monitoring.conf
   
  • 파일이 이미 있으면 백업합니다.
     cp -v $FWDIR/conf/cpha_link_monitoring.conf{,_BKP}
     
  • 파일이 없으면 만듭니다.
     touch $FWDIR/conf/cpha_link_monitoring.conf
     

b. 설정 파일에 값 all 만 넣습니다.

   echo all > $FWDIR/conf/cpha_link_monitoring.conf
   
  1. 모든 멤버에서 VMAC을 켭니다 — SmartConsole에서 클러스터 객체를 열고, ClusterXL and VRRPHigh AvailabilityClusterXL 을 고른 뒤 Advanced Settings 에서 Use Virtual MAC 을 선택하고 OK, 마지막으로 Access Control Policy를 설치합니다.

Same VMAC과 Silent Standby 끄기: 각 멤버 Expert mode에서 다음을 실행하고, 마지막으로 SmartConsole에서 Use Virtual MAC 선택을 해제한 뒤 정책을 설치합니다.

fw ctl set -f int fwha_alter_vmac_param 0
fw ctl set -f int fwha_silent_standby_mode 0
echo '' > $FWDIR/conf/cpha_link_monitoring.conf

Same VMAC 모니터링: 앞의 VMAC 모니터링처럼 show cluster members interfaces virtual(Clish) 또는 cphaprob -a if(Expert)로 VMAC을 확인하고, 호스트 ARP 테이블에 VMAC이 들어 있는지 점검합니다. Same VMAC으로 인해 클러스터 인터페이스에 실린 MAC 자체를 보려면 다음을 씁니다.

show interfaces all
show interface <물리 인터페이스 이름><SPACE><TAB>

Expert mode에서는 ifconfig 입니다.

클러스터에서 VPN 다루기

클러스터에 VPN 구성하기

클러스터에 VPN을 구성하는 일은 단일 Security Gateway에 구성하는 것과 매우 비슷합니다. VPN의 모든 속성은 Cluster 객체 에 정의하고, 단 두 가지 속성만 각 Cluster Member 객체 에 정의합니다.

  1. SmartConsole에서 클러스터 객체를 엽니다.
  2. 왼쪽 트리에서 Cluster Members 페이지로 갑니다.
  3. 각 Cluster Member를 선택하고 Edit 을 클릭하면 Cluster Member Properties 창이 열립니다.
  4. VPN 탭으로 가서 멤버별 두 속성 을 설정합니다.
  • Office Mode for Remote access 영역: 원격 접속에 Office Mode를 쓰려면 Offer Manual Office Mode 를 선택하고 각 멤버에 할당할 IP 풀을 정합니다.
    • Certificate List with keys stored on the Security Gateway 영역: 멤버가 IKE 인증서를 하드웨어에 저장하는 기능을 지원하면 인증서 속성을 정의합니다. 이 경우 Management Server가 멤버에게 키 생성을 지시하고, 멤버는 인증서 요청 생성에 필요한 재료만 제공합니다. 인증서는 정책 설치 때 멤버로 내려받습니다.
  • OK 로 창을 닫습니다.
  • 왼쪽 트리에서 ClusterXL and VRRP 페이지로 갑니다.
  • Use State Synchronization반드시 선택 합니다 — IKE 키 동기화에 필요합니다.
  • 왼쪽 트리에서 Network Management > VPN Domain 페이지로 갑니다.
  • 클러스터의 암호화 도메인을 정의합니다. 두 설정 중 하나를 고릅니다.
  • All IP addresses behind Cluster Members based on Topology information — Topology 정보 기준(기본값).
    • Manually defined — 클러스터 IP가 멤버 네트워크에 있지 않을 때, 즉 클러스터 VIP가 멤버 인터페이스와 다른 서브넷 에 있을 때 씁니다. 이 경우 클러스터 VIP를 포함하는 네트워크(또는 그룹)와 클러스터 뒤의 네트워크(또는 그룹)를 선택합니다.
  • OK 로 Gateway Cluster Properties 창을 닫습니다.
  • 클러스터에 Access Control Policy를 설치합니다.

별도 Management Server가 관리하는 VPN 피어 클러스터 정의

VPN 피어가 다른 Management Server가 관리하는 Check Point Cluster라면, 또 다른 클러스터 객체를 만들지 마세요. 대신 이렇게 합니다.

  1. SmartConsole에서 Objects 메뉴 > More object types > Network Object > Gateways and Servers > More > New Externally Managed VPN Gateway 로 갑니다.
  2. General Properties 페이지에서 이름과 IP 주소를 구성합니다.
  3. Topology 페이지에서 New 를 클릭해 VPN 피어의 외부·내부 클러스터 인터페이스를 추가합니다.
  4. Topology 페이지의 VPN Domain 영역에서, 외부 관리 Security Gateway의 암호화 도메인을 그 내부 Virtual IP 뒤에 있도록 정의합니다. 암호화 도메인이 서브넷 하나면 All IP addresses behind Gateway based on Topology information, 여러 서브넷이면 Manually defined 를 선택합니다.
  5. OK 를 클릭합니다.
  6. 클러스터에 Access Control Policy를 설치합니다.

클러스터에서 NAT 다루기

Cluster Fold와 Cluster Hide

NAT(Network Address Translation)는 ClusterXL 동작 방식의 근본적인 한 부분입니다. 클러스터 자체가 두 가지 자동 NAT를 늘 수행합니다.

  • Cluster Hide — 멤버가 인터넷으로 나가는 연결을 맺으면, 나가는 패킷의 출발지 주소는 원래 멤버 인터페이스의 물리 IP인데, 이것이 NAT로 클러스터 외부 Virtual IP 로 바뀝니다.
    • Gaia VRRP 클러스터에서는 클러스터 객체 ClusterXL and VRRP 페이지의 Hide Cluster Members outgoing traffic behind the Cluster IP address 기본 선택에 해당합니다.
    • IPSO VRRP 클러스터에서는 3rd Party Configuration 페이지의 같은 옵션에 해당합니다.
  • Cluster Fold — 클라이언트가 클러스터 외부(가상) 주소로 들어오는 연결을 맺으면, ClusterXL이 목적지 IP를 NAT로 어느 한 멤버의 물리 외부 주소 로 바꿉니다.
    • Gaia VRRP 클러스터에서는 Forward Cluster incoming traffic to Cluster Members IP address 기본 선택에 해당합니다.
    • IPSO IP Clustering 클러스터에서는 3rd Party Configuration 페이지의 같은 옵션에 해당합니다.

클러스터에 NAT 구성하기

클러스터에서도 단일 Security Gateway와 똑같이 NAT를 수행할 수 있습니다. 이 NAT는 위의 자동 Cluster Fold·Cluster Hide에 추가로 적용됩니다. NAT를 구성하려면 Cluster 객체 를 편집하고 Cluster Properties 창의 NAT 페이지를 씁니다. Cluster Member 객체의 NAT 탭은 건드리지 마세요.

Cluster Member에 NAT 구성하기

Cluster Member의 비-클러스터(non-cluster) 인터페이스 에 NAT를 수행할 수도 있습니다. 예를 들어 멤버의 비-클러스터 인터페이스가 또 다른 (비-클러스터) 내부 Security Gateway에 연결되어 있고, 그 인터페이스의 주소를 숨기고 싶을 때 유용합니다. 이러면 비-클러스터 인터페이스 뒤(또는 위)에서 출발해 내부 Security Gateway 반대편 호스트로 가는 패킷의 출발지 주소가 번역됩니다.

  1. Cluster 객체를 편집합니다.
  2. Cluster Member 페이지에서 멤버 객체를 편집합니다.
  3. Cluster Member Properties 창에서 NAT 탭을 클릭합니다.
  4. 필요에 맞게 Static 또는 Hide NAT를 구성합니다.
  5. 클러스터에 Access Control Policy를 설치합니다.

클러스터에서 VLAN 다루기

VLAN 스위치는 어느 VLAN에서 출발한 패킷에 어느 스위치 포트에서 왔는지를 나타내는 4바이트 헤더(태그) 를 붙입니다. 한 VLAN의 스위치 포트에서 다른 VLAN의 포트로는 패킷이 갈 수 없고, 예외는 모든 VLAN에 속하도록 정의된 "global" 포트뿐입니다. Cluster Member는 이 global 포트에 연결되며, 그러면 하나의 물리 포트가 여러 VLAN 포트(각각 멤버의 VLAN 태그 인터페이스에 대응) 로 논리적으로 나뉩니다.

인터페이스에 VLAN 태그를 정의할 때, 클러스터 IP 주소는 VLAN 인터페이스(태그된 인터페이스)에만 정의할 수 있습니다. VLAN을 가진 물리 인터페이스에 클러스터 IP를 두는 것은 지원되지 않으며, 그 물리 인터페이스는 Network Type을 Private 으로 정의해야 합니다.

ClusterXL(VSX 포함)은 동기화 네트워크(Delta Sync 정보를 나르는 CCP 패킷)를 가장 낮은 VLAN ID(VLAN 태그)에서만 지원합니다. 예를 들어 eth1에 ID 10·20·30 세 VLAN이 있으면 State Synchronization에는 eth1.10만 쓸 수 있습니다.

기본 인터페이스 감시는 이렇습니다.

인터페이스 종류ClusterXL(비-VSX)에서의 감시VSX Cluster에서의 감시
물리 인터페이스모든 클러스터 인터페이스를 감시모든 클러스터 인터페이스를 감시
VLAN 인터페이스물리 인터페이스에 구성된 가장 낮은 VLAN ID만 감시VSX HA(비-VSLS): 가장 낮은·가장 높은 VLAN ID만 감시(두 VLAN ID가 같은 Virtual System에 있으면 가장 낮은 것만). VSLS: 각 Virtual System의 물리 인터페이스에 구성된 모든 VLAN ID를 감시. Virtual System이 더 낮은 VLAN ID·같은 물리 인터페이스로 Virtual Switch에 연결되면, Virtual Switch로 가는 wrp 인터페이스가 그 물리 인터페이스의 가장 낮은 VLAN ID로 간주됨

기본 감시는 커널 파라미터로 바꿀 수 있습니다.

감시하고 싶은 대상ClusterXL(비-VSX)VSX Cluster
가장 낮은 VLAN ID만기본 활성. 모든 VLAN ID 감시를 끄려면 fwha_monitor_all_vlan 을 0으로(sk92826)
가장 낮은·가장 높은 VLAN ID만기본 활성. fwha_monitor_low_high_vlans 로 제어(sk92826)VSX HA(비-VSLS): 기본 활성, fwha_monitor_low_high_vlans 로 제어(sk92826)
모든 VLAN ID기본 비활성. fwha_monitor_all_vlan 으로 제어(sk92826)VSLS: 기본 비활성, fwha_monitor_all_vlan 으로 제어(sk92826)
특정 VLAN ID만기본 비활성. fwha_monitor_specific_vlan 으로 제어(sk92784)기본 비활성. fwha_monitor_specific_vlan 으로 제어(sk92784)

클러스터 인터페이스의 Link Monitoring 구성

이 절차는 Cluster Member가 클러스터 인터페이스에서 CCP 패킷 대신 물리 링크만 감시 하도록 구성합니다.

  • 구성된 인터페이스에서 링크가 사라지면, 멤버는 그 인터페이스 상태를 DOWN으로 바꾸고, 이로 인해 멤버 자신의 상태도 DOWN이 됩니다.
  • 링크가 다시 나타나면, 인터페이스 상태가 UP으로 돌아가고 멤버 상태도 ACTIVE 또는 STANDBY로 돌아갑니다.

절차:

단계내용
1Cluster Member 명령줄에 접속합니다.
2Expert mode로 로그인합니다.
3설정 파일이 있는지 확인합니다: stat $FWDIR/conf/cpha_link_monitoring.conf
4파일이 있으면 백업(cp -v $FWDIR/conf/cpha_link_monitoring.conf{,_BKP}), 없으면 생성(touch $FWDIR/conf/cpha_link_monitoring.conf)
5파일을 편집합니다: vi $FWDIR/conf/cpha_link_monitoring.conf
6특정 인터페이스만 감시하려면 인터페이스 이름을 한 줄에 하나씩(예: eth2, eth4), 모든 인터페이스를 감시하려면 all 한 단어만 적습니다.
7저장하고 편집기를 빠져나갑니다.
8Cluster Member를 재부팅합니다.

Best Practice — 모드별 무중단 적용 순서:

  • High Availability 클러스터: ① 모든 멤버에 설정 → ② 모든 Standby 멤버 재부팅 → ③ Active 멤버에서 수동 페일오버 → ④ 옛 Active 멤버 재부팅.
  • Load Sharing Unicast 클러스터: ① 모든 멤버에 설정 → ② 모든 비-Pivot 멤버 재부팅 → ③ Pivot 멤버에서 수동 페일오버 → ④ 옛 Pivot 멤버 재부팅.
  • Load Sharing Multicast 클러스터: ① 모든 멤버에 설정 → ② 한 멤버만 빼고 모두 재부팅 → ③ 남은 멤버에서 수동 페일오버 → ④ 남은 멤버 재부팅.

Load Sharing Unicast 모드에서 Assigned Load 구성

Load Sharing Unicast 모드에서는 기본적으로 다음과 같이 멤버에 트래픽을 배분합니다.

총 멤버 수Pivot 멤버가 검사하는 트래픽 %각 비-Pivot 멤버가 검사하는 트래픽 %
1100해당 없음
230(100% − 30%) / 1 = 70%
320(100% − 20%) / 2 = 40%
410(100% − 10%) / 3 = 30%
50(100% − 0%) / 4 = 25%

기본 배분 비율을 바꾸려면 다음을 진행합니다.

  1. Security Management Server / 해당 Domain Management Server를 백업합니다(sk108902 - Gaia OS 백업 모범 사례, sk91400 - Gaia 시스템 백업·복원).
  2. 모든 SmartConsole 창을 닫습니다.

클러스터에서 Bond 인터페이스 다루기

Bonding(Link Aggregation) 용어

  • Link Aggregation(Interface Bonding) — 여러 물리 인터페이스를 하나의 가상 인터페이스로 묶는 네트워킹 기술입니다.
  • Bond — 하나의 가상 인터페이스처럼 함께 동작하며 IP·MAC 주소를 공유하는 물리 인터페이스 그룹. 클러스터는 Bond ID(예: bond0)로 식별합니다.
  • Bond Interface — bond의 논리적 표현입니다.
  • Subordinate interface(하위 인터페이스) — bond의 멤버인 물리 인터페이스. IP 주소가 없고, 경우에 따라 같은 MAC을 공유합니다.

Bond 인터페이스(Link Aggregation)

Check Point 보안 장비는 여러 물리 인터페이스를 하나의 가상 인터페이스(bond 인터페이스)로 묶는 Link Aggregation을 지원합니다. bond 인터페이스는 여러 인터페이스가 부하를 나눠 장애 허용(fault tolerance)과 처리량 증가 를 줍니다. Check Point 장비는 동적 링크 결합을 위해 IEEE 802.3ad Link Aggregation Control Protocol(LACP) 를 지원합니다.

p.146
p.146
항목설명
1Security Gateway
1AInterface 1
1BInterface 2
2Bond Interface
3Router

bond 인터페이스(bonding group, bond)는 Bond ID(예: bond1)로 식별되고 IP 주소가 할당됩니다. bond에 포함된 물리 인터페이스는 subordinate interface 라 하며 IP 주소가 없습니다. bond는 다음 두 동작 전략 중 하나를 씁니다.

  • High Availability(Active/Backup) — 인터페이스·링크 장애 시 이중화를 제공하며 스위치 이중화도 지원합니다. 인터페이스 Active/Standby 모드로 동작해, Active 하위 인터페이스가 다운되면 자동으로 primary 하위 인터페이스로 페일오버하고, 그것도 안 되면 다른 하위 인터페이스로 페일오버합니다.
  • Load Sharing(Active/Active) — UP 상태의 모든 하위 인터페이스를 동시에 써서 처리량을 극대화합니다. 단 스위치 이중화는 지원하지 않습니다.

Bond Load Sharing은 다음 모드 중 하나를 씁니다.

모드설명
Round RobinActive 하위 인터페이스를 순서대로 선택합니다. > 참고 — Scalable Platform(ElasticXL·Maestro·Chassis)은 이 기능을 지원하지 않습니다(알려진 제약 MBS-4080).
802.3adLACP 프로토콜로 Active 하위 인터페이스를 동적으로 써서 부하를 나눕니다. 게이트웨이와 스위치 사이 링크를 완전히 감시합니다.
XORUP 상태의 모든 하위 인터페이스가 Active입니다. 전송 해시 정책(Layer 2의 하드웨어 MAC XOR, 또는 Layer 3+4의 IP·포트)에 따라 트래픽을 배정합니다.
ABXORUP 상태의 하위 인터페이스를 bundle 이라는 하위 그룹으로 묶고, 한 번에 하나의 bundle만 Active 입니다. Active bundle의 모든 인터페이스가 전송 해시 정책에 따라 부하를 나눕니다. > 참고 — Scalable Platform은 이 기능을 지원하지 않습니다(알려진 제약 MBS-1520).

Bonding HA·Load Sharing 모드 공통으로, 정의 가능한 bond 인터페이스 수는 플랫폼별 최대 인터페이스 수로 제한됩니다(R82 Release Notes 참고). 또한 하나의 bond에 물리 하위 인터페이스를 최대 8개 까지 구성할 수 있습니다.

클러스터에서 Bond High Availability 모드

미션 크리티컬 애플리케이션을 다루는 기업은 네트워크가 항상 가용 하기를 요구합니다. 클러스터링은 Security Gateway 수준의 이중화를 제공하지만, Bonding이 없으면 NIC나 게이트웨이 양쪽 스위치의 이중화는 오직 한 멤버에서 다른 멤버로의 페일오버 로만 가능합니다.

Simple Redundant Topology(단순 이중화)

Bonding 없이도 클러스터링만으로 이중화를 얻을 수 있습니다. 스위치나 멤버가 고장 나면 HA 클러스터가 시스템 이중화를 제공합니다. 예를 들어 동기화된 멤버 둘을 단순 이중화 구조로 배치할 수 있습니다.

p.150
p.150
항목설명
1외부 스위치(5·6)에 연결된 인터페이스를 가진 멤버 GW1
2외부 스위치(5·6)에 연결된 인터페이스를 가진 멤버 GW2
3상호 연결 네트워크 C1
4상호 연결 네트워크 C2
5스위치 S1
6스위치 S2

GW1, 그 NIC, 또는 S1이 고장 나면 GW2가 유일한 Active 멤버가 되어 C2를 거쳐 S2에 연결됩니다. 다만 어느 한 구성요소(멤버·NIC·스위치)가 고장 나 페일오버하면 더 이상 이중화가 남지 않으며, 이후 또 한 번 Active 구성요소가 고장 나면 이 클러스터를 통한 트래픽이 완전히 멈춥니다.

Fully Meshed Redundancy(완전 메시 이중화)

Bonding HA 모드를 ClusterXL과 함께 쓰면, 완전 메시 구조 로 더 세밀한 이중화를 얻어 NIC와 스위치 모두에 독립적인 백업을 둘 수 있습니다 — 사실상 케이블까지 백업하는 셈입니다. 각 멤버는 외부 인터페이스 둘을 두어 각각 다른 스위치에 연결합니다.

p.151
p.151
항목설명
1외부 스위치(4·5)에 연결된 멤버 GW1
2외부 스위치(4·5)에 연결된 멤버 GW2
3상호 연결 네트워크
4스위치 S1
5스위치 S2

멤버에서 외부 스위치로 가는 인터페이스 하나가 고장 나도 다른 인터페이스가 연결성을 이어 줍니다. Bonding이 NIC의 High Availability 를 제공하므로, 하나가 고장 나도 다른 하나가 그 자리를 대신합니다.

High Availability 모드에서의 Bond 페일오버

멤버에 구성된 Bond HA 모드에서 bond 내부 페일오버는 다음 두 경우에 일어납니다.

  • Active 인터페이스가 감시 중인 인터페이스의 링크 상태 장애 를 감지할 때.
  • ClusterXL이 CCP 패킷 송수신 장애 를 감지할 때.

둘 중 어느 쪽이든, 상황에 따라 bond 내부 또는 멤버 사이에서 페일오버를 일으킵니다. 장애가 감지되면 로그가 기록됩니다 — SmartConsole에서 Management Server에 접속해 왼쪽 패널의 Logs & Events > Logs 에서 확인합니다.

High Availability 모드에서 Bond 인터페이스 구성

각 멤버에서 R82 Gaia Administration GuideNetwork Management > Network Interfaces > Bond Interfaces (Link Aggregation) 절 지침을 따릅니다.

Bond 인터페이스가 제대로 동작하는지 확인

bond 인터페이스가 UP인지 확인합니다.

단계내용
1각 멤버 명령줄에 접속합니다.
2클러스터 인터페이스를 확인합니다 — Clish: show cluster members interfaces all, Expert: cphaprob -am if
3bond 인터페이스를 확인합니다 — Clish: `show cluster bond {all \name <Bond 이름>}show bonding groups, Expert: cphaprob show_bond <Bond 이름>`

VLAN 페일오버 지원

Bonding HA 모드에서 ClusterXL은 VLAN ID의 연결 장애·통신 오류를 감시하고, 장애를 감지하면 페일오버를 시작합니다. VLAN 스위치 환경에서는 가장 낮은 ID의 VLAN 을 감시하며, 일정 간격으로 왕복 경로에 CCP 패킷을 보내 점검합니다. 가장 낮은 VLAN ID가 물리 연결 상태를 대표하므로 항상 감시되고, 연결 장애가 나면 페일오버가 일어납니다. 단 ClusterXL은 스위치 쪽 VLAN 구성 문제까지는 감지하지 못합니다.

Sync Redundancy(동기화 이중화)

여러 물리 동기화 인터페이스(1st·2nd·3rd sync)를 따로따로 동기화 이중화에 쓰는 것은 지원되지 않습니다. 동기화 이중화는 bond 인터페이스로 구현합니다.

요구사항·제약:

  • 각 멤버의 bond 하위 인터페이스는 같은 스위치 또는 VLAN 에 연결되어야 합니다(예: 모든 멤버의 물리 eth1이 같은 스위치에 연결).
  • 인터페이스와 기타 네트워크 하드웨어가 IEEE 802.3 bond 모드를 지원하길 권장합니다.
  • Bond를 HA 모드로 쓴다면, 모든 멤버에서 같은 순서로 하위 인터페이스를 bonding group에 추가해야 합니다.

Sync High Availability용 bond 구성:

  1. 각 멤버에서 사용하지 않는 하위 인터페이스로 bond 인터페이스를 HA 모드로 구성합니다.
  2. SmartConsole로 Management Server에 접속합니다.
  3. 왼쪽 패널에서 Gateways & Servers 를 클릭합니다.
  4. 클러스터 객체를 엽니다.
  5. 왼쪽 트리에서 Network Management 를 클릭합니다.
  6. 위쪽에서 Get Interfaces > Get Interfaces With Topology 를 클릭합니다.
  7. 해당 인터페이스를 선택하고 Edit 을 클릭합니다.
  8. General 영역의 Network Type 필드에서 Sync 를 선택합니다.
  9. OK 를 클릭합니다.
  10. 클러스터 객체에 Access Control Policy를 설치합니다.
  11. 각 멤버에서 Sync 인터페이스가 bond 안에 있는지 확인합니다 — Clish: show cluster members interfaces all, Expert: cphaprob -am if

VRRP 클러스터에서 Bond High Availability 구성

R80.20 버전은 ClusterXL에서 동작하는 개선된 Active/Backup Bond 메커니즘(Enhanced Bond)을 도입했습니다. ClusterXL을 쓰면 Enhanced Bond는 기본으로 켜져 있고 추가 설정이 필요 없습니다. 그러나 구성을 ClusterXL에서 VRRP(MCVR & VRRP)로 바꾸거나 VRRP 클러스터를 처음부터 만들면 Enhanced Bond는 기본으로 꺼집니다. 반대로 VRRP에서 ClusterXL로 바꾸면 Enhanced Bond를 수동으로 켜야 합니다.

VRRP 클러스터에서 Enhanced Bond를 켜려면 각 VRRP 멤버에서 커널 파라미터 fwha_bond_enhanced_enable 값을 1로 설정합니다. 임시 또는 영구로 설정할 수 있습니다.

임시 설정(재부팅하면 원복):

단계내용
1각 VRRP 멤버 명령줄에 접속합니다.
2Expert mode로 로그인합니다.
3fw ctl set int fwha_bond_enhanced_enable 1
4fw ctl get int fwha_bond_enhanced_enable 로 1로 설정됐는지 확인합니다.

영구 설정:

단계내용
1각 멤버 명령줄에 접속합니다.
2Expert mode로 로그인합니다.
3백업: cp -v $FWDIR/boot/modules/fwkern.conf{,_BKP}
4편집: vi $FWDIR/boot/modules/fwkern.conf
5다음 줄을 추가합니다(공백·주석 금지): fwha_bond_enhanced_enable=1
6저장하고 편집기를 나갑니다.
7멤버를 재부팅합니다.
8fw ctl get int fwha_bond_enhanced_enable 로 확인합니다.

클러스터에서 Bond Load Sharing 모드

Bond Load Sharing 모드에서는 이렇게 동작합니다.

  • 모든 하위 인터페이스가 Active이고, ClusterXL Load Sharing이 멤버 사이 연결을 나누듯 bond 하위 인터페이스 사이로 연결이 분산 됩니다.
  • 각 연결은 특정 하위 인터페이스 하나 에 배정됩니다. 그 인터페이스가 고장 나면 bond가 그 연결을 다른 하위 인터페이스로 페일오버하고, 그 인터페이스는 기존에 처리하던 연결에 더해 실패한 인터페이스의 연결까지 떠맡습니다.
  • bond의 모든 하위 인터페이스는 같은 스위치 에 연결되어야 하며, 스위치 자체도 게이트웨이 bond와 같은 표준(예: 802.3ad, XOR) 으로 Bonding을 지원·구성해야 합니다.

Load Sharing 모드에서의 Bond 페일오버

HA 모드와 마찬가지로, ① Active 인터페이스가 감시 인터페이스의 링크 상태 장애를 감지하거나, ② ClusterXL이 CCP 패킷 송수신 장애를 감지할 때 bond 내부 페일오버가 일어납니다. 장애가 감지되면 SmartConsole의 Logs & Events > Logs 에 로그가 기록됩니다.

필요한 최소 하위 인터페이스 수 구성

ClusterXL은 Load Sharing 모드의 bond에서 UP 상태로 남은 하위 인터페이스 수가 최소 필요 수보다 적으면 bond를 "down" 상태로 간주합니다. 기본적으로, 하위 인터페이스가 n개인 bond에서 UP을 유지해야 하는 최소 수는 n−1 입니다. 즉 하위 인터페이스가 하나만 더 고장 나(n−2개만 UP) bond가 둘보다 많은 하위 인터페이스를 갖고 있어도 ClusterXL은 bond를 "down"으로 봅니다. 더 적은 수로도 예상 트래픽을 처리할 수 있다면 최소 필요 수를 명시적으로 구성할 수 있습니다("Bond Load Sharing의 최소 필요 하위 인터페이스 수 구성" 절 참고).

Bond 인터페이스가 제대로 동작하는지 확인

Bond HA 때와 동일합니다 — 각 멤버 명령줄에서 show cluster members interfaces all(Clish) 또는 cphaprob -am if(Expert)로 클러스터 인터페이스를, show cluster bond {all | name <Bond 이름>}·show bonding groups(Clish) 또는 cphaprob show_bond <Bond 이름>(Expert)로 bond 인터페이스를 확인합니다.

Group of Bonds(Bond 그룹)

Group of Bonds 는 기존 Bond 인터페이스들을 묶은 논리 그룹으로, 추가 링크 이중화 를 제공합니다.

예시 토폴로지를 보겠습니다.

  • 라우터 R 하나, R에 연결된 스위치 둘(SW-1, SW-2), 멤버 둘(GW-A는 Active, GW-B는 Standby)이 있습니다.
  • 각 멤버에 Bond 인터페이스 둘(Bond-1, Bond-2)이 있습니다.
  • GW-A: Bond-1 → SW-1, Bond-2 → SW-2.
  • GW-B: Bond-1 → SW-2, Bond-2 → SW-1.
p.166
p.166

Group of Bonds가 없을 때의 사건 흐름:

  1. GW-A가 Active, GW-B가 Standby입니다.
  2. GW-A에서 Bond-1이 고장 납니다.
  3. GW-A의 Critical Device "Interface Active Check" 가 상태를 "problem"으로 보고합니다.
  4. GW-A가 클러스터 상태를 Active에서 Down으로 바꿉니다.
  5. 클러스터가 페일오버해 GW-B가 Standby에서 Active가 됩니다.

이것은 바람직하지 않은 동작 입니다. GW-A는 SW-1뿐 아니라 SW-2에도 연결되어 있어, 이 토폴로지에서는 GW-A → GW-B로 페일오버할 실제 이유가 없기 때문입니다. 이를 해결하려고 멤버는 Bond-1과 Bond-2로 이루어진 Group of Bonds를 씁니다. 두 Bond가 모두 고장 났을 때만 Group of Bonds가 실패하고, 그때만 클러스터가 페일오버합니다.

Group of Bonds가 구성됐을 때의 사건 흐름:

  1. GW-A가 Active, GW-B가 Standby입니다.
  2. GW-A에서 Bond-1이 고장 납니다.
  3. Critical Device가 "problem"을 보고합니다.
  4. GW-A는 Active에서 Down으로 바뀌지 않습니다.
  5. GW-A에서 Bond-2까지 고장 납니다.
  6. 이제 GW-A가 Active에서 Down으로 바뀝니다.
  7. 클러스터가 페일오버해 GW-B가 Active가 됩니다.

새 Group of Bonds 만들기

  1. 멤버 명령줄에 접속합니다.
  2. Expert mode로 로그인합니다.
  3. VSX Cluster라면 해당 Virtual System 컨텍스트로 전환합니다: vsenv <VSID>
  4. $FWDIR/boot/modules/fwkern.conf 파일을 수정합니다.

a. 백업: cp -v $FWDIR/boot/modules/fwkern.conf{,_BKP}

b. 편집: vi $FWDIR/boot/modules/fwkern.conf

c. 파일 맨 아래에 다음 두 줄을 추가합니다(공백·주석 금지).

   fwha_group_of_bonds_str=<Group of Bonds 이름>:<이 그룹의 모든 Bond를 쉼표로 구분한 목록>
   fwha_arp_probe_method=1
   

예:

   fwha_arp_probe_method=1
   

d. 저장하고 편집기를 나갑니다. 5. 즉시(on-the-fly) 그룹을 추가하도록 fwha_group_of_bonds_str 값을 바꿉니다.

   fw ctl set str fwha_group_of_bonds_str '<Group of Bonds 이름>:<쉼표로 구분한 Bond 목록>'
   

예:

   fw ctl set str fwha_group_of_bonds_str 'GoB0:bond0,bond1;GoB1:bond2,bond3'
   

기존 Group of Bonds에 Bond 인터페이스 추가

  1. 멤버 명령줄에 접속합니다.
  2. VSX Cluster라면 컨텍스트를 전환합니다: vsenv <VSID>
  3. Expert mode로 로그인합니다.
  4. $FWDIR/boot/modules/fwkern.conf 를 수정합니다 — 백업·편집 후 fwha_group_of_bonds_str 값에 추가할 Bond를 적습니다. 예: fwha_group_of_bonds_str=GoB0:bond0,bond1;GoB1:bond2,bond3,bond4. 저장하고 나갑니다.
  5. 현재 값을 얻어 복사해 둡니다: fw ctl get str fwha_group_of_bonds_str
  6. 현재 값을 비웁니다: fw ctl set str fwha_group_of_bonds_str ''
  7. 값이 비워졌는지 확인합니다: fw ctl get str fwha_group_of_bonds_str
  8. 즉시 Bond를 추가하도록 값을 다시 설정합니다.
   fw ctl set str fwha_group_of_bonds_str 'GoB0:bond0,bond1;GoB1:bond2,bond3,bond4'
   

기존 Group of Bonds에서 Bond 인터페이스 제거

추가 절차와 거의 같습니다. 멤버 명령줄에 접속 → (VSX라면 vsenv <VSID>) → Expert mode → fwkern.conf 백업·편집 후 fwha_group_of_bonds_str 값에서 해당 Bond를 빼고(예: fwha_group_of_bonds_str=GoB0:bond0,bond1;GoB1:bond2,bond3) 저장합니다. 그다음 현재 값을 복사(fw ctl get str ...)하고, 값을 비우고(fw ctl set str fwha_group_of_bonds_str ''), 비워졌는지 확인한 뒤, 다음으로 즉시 다시 설정합니다.

fw ctl set str fwha_group_of_bonds_str 'GoB0:bond0,bond1;GoB1:bond2,bond3'

마지막으로 값을 확인하고 SmartConsole에서 정책을 설치합니다. (작은따옴표 필수, 공백 금지)

Group of Bonds 삭제

  1. 멤버 명령줄에 접속합니다.
  2. Expert mode로 로그인합니다.
  3. VSX Cluster라면 컨텍스트를 전환합니다: vsenv <VSID>
  4. $FWDIR/boot/modules/fwkern.conf 를 수정합니다 — 백업·편집 후 다음 두 줄을 삭제 합니다.
   fwha_group_of_bonds_str=<Group of Bonds 이름>:<쉼표로 구분한 Bond 목록>
   fwha_arp_probe_method=1
   

저장하고 나갑니다. 5. 현재 값을 비웁니다: fw ctl set str fwha_group_of_bonds_str '' 6. 비워졌는지 확인합니다: fw ctl get str fwha_group_of_bonds_str 7. SmartConsole에서 Access Control Policy를 설치합니다.

Group of Bonds 모니터링과 로그

구성된 Group of Bonds를 보려면 cphaprob show_bond_groups 를 실행합니다("Bond 인터페이스 보기" 절 참고).

멤버는 관련 로그를 남깁니다.

  • User Space 로그 — 비-VSX 클러스터에서는 /var/log/messages 파일과 dmesg 출력에, VSX 클러스터에서는 해당 Virtual System 컨텍스트의 $FWDIR/log/fwk.elg 파일에 남습니다.
  • Kernel Space 로그 — 커널 모듈 fw 에서 디버그 플래그 error·ioctl 을, 커널 모듈 cluster 에서 플래그 if 를 켭니다(R82 Quantum Security Gateway Guide의 Kernel Debug 장 참고). 커널 디버그는 물리 하위 인터페이스의 down/up, Bond 인터페이스의 down/up(멤버 상태 변화와 무관), Group of Bonds의 down/up을 보여 줍니다.

Group of Bonds의 제약

  • "Group of Bonds 이름" 문자열의 최대 길이는 16자 입니다.
  • <Group of Bonds 이름>:<쉼표로 구분한 Bond 목록> 문자열의 최대 길이는 1024자 입니다.
  • 멤버 또는 Virtual System당 최대 5개 의 Group of Bonds를 구성할 수 있습니다.
  • 각 Group of Bonds에 최대 5개 의 Bond 인터페이스를 구성할 수 있습니다.
  • Group of Bonds는 Virtual Switch·Virtual Router를 지원하지 않습니다(이 가상 장치 컨텍스트에서는 구성하지 마세요).
  • 같은 Virtual System에 속한 Bond 인터페이스만 지원합니다 — 서로 다른 Virtual System의 bond를 한 그룹에 묶을 수 없고, 모든 구성은 해당 Virtual System 컨텍스트에서 해야 합니다.
  • Sync 인터페이스(Network Type이 Sync 또는 Cluster+Sync)와 Bridge 인터페이스를 지원 합니다.
  • 한 멤버에서 Bond 인터페이스가 다운되면, 피어 멤버에서 cphaprob show_bond_groups 를 실행해도 같은 Bond가 DOWN으로 보입니다. 피어 멤버가 그 Bond에서 CCP 패킷을 못 받게 되어 로컬 네트워크를 탐침할 수 없기 때문입니다.
  • Group of Bonds에 Bond를 추가하거나 제거한 뒤에는 반드시 클러스터 객체에 Access Control Policy를 설치 해야 합니다.

Bond 인터페이스 성능 지침

최적 성능을 위해 다음을 따릅니다.

  1. bond 하위 인터페이스의 정적 affinity 를 CPU 코어에 구성합니다.
  2. 가능하면 인터페이스마다 처리 코어 하나를 전담시킵니다.
  3. 물리 인터페이스가 CPU 코어보다 많으면 일부 코어가 인터페이스를 둘 이상 처리하게 됩니다. 이때 내부·외부 bond에서 같은 위치에 있는 하위 인터페이스를 짝지어 한 코어에 맡기세요.

a. bond 내 하위 인터페이스의 위치를 보려면 Expert mode에서 cat /proc/net/bonding/<Bond 인터페이스 이름> 을 실행합니다.

b. 출력의 인터페이스 순서를 적어 두고, 외부 bond와 그에 대응하는 내부 bond의 순서를 비교합니다. 두 bond에서 같은 위치 에 나타나는 하위 인터페이스가 짝(pair)이며, 이 짝을 한 CPU 코어가 처리하도록 설정합니다.

예시 구성 — 처리 코어 4개(core 0~3), bond 둘(bond0는 eth0·eth1·eth2, bond1는 eth3·eth4·eth5)이 있는 장비라면 코어 둘이 하위 인터페이스를 둘씩 처리해야 합니다. 최적 구성 예시는 다음과 같습니다.

CPU 코어bond0bond1
0eth0eth3
1eth1eth4
2eth2
3eth5

자세히는 R82 Performance Tuning Administration Guide의 CoreXL > Configuring Affinity Settings, Affinity Settings for 16000 and 26000 Appliances 절을 참고하세요.

Bond 인터페이스 문제 해결

문제 해결 흐름:

  1. SmartConsole의 Logs & Events > Logs 에서 이 클러스터의 로그를 봅니다.
  2. 멤버에서 bond 인터페이스 상태를 확인합니다 — Clish: show cluster bond name <Bond 이름>, Expert: cphaprob show_bond <Bond 이름>
  3. 문제가 있으면 물리 링크가 다운됐는지 봅니다.

a. 링크 상태를 "no"로 보고하는 하위 인터페이스를 찾습니다.

b. 케이블 연결과 기타 하드웨어를 점검합니다.

c. 이 하위 인터페이스가 연결된 스위치의 포트 구성을 점검합니다.

VSX Cluster Member에서는 bond 인터페이스에 다음 작업을 한 뒤 재부팅이 필요 합니다 — ① bond 모드 변경, ② 기존 bond에 하위 인터페이스 추가.

스위치에서의 연결 지연 — 일부 내부 bond 페일오버 동안 스위치에서 연결 지연이 생길 수 있습니다. 요즘 스위치의 여러 기능 때문에, 새로 연결된 인터페이스를 스위치가 처리하기 시작하기까지 거의 1분 이 걸리기도 합니다. 링크 장애 후 시작 시간을 줄이는 방법은 이렇습니다.

  1. 해당 인터페이스에서 auto-negotiation을 끕니다.
  2. Cisco 스위치라면 PortFast 기능을 켭니다(해당 Cisco 문서 참고).

고급 클러스터 구성(커널 파라미터)

여러 동기화·ClusterXL 기능은 커널 파라미터 로 제어됩니다.

클러스터링·동기화 타이머 제어

파라미터설명기본값
fwha_timer_sync_res클러스터의 sync flush 작업 빈도. 작업은 10 × (fwha_timer_sync_res) × (fwha_timer_base_res) 밀리초마다 일어납니다.1
fwha_timer_base_res10으로 나누어 나머지가 없어야 합니다.10

부하가 높을 때 새 연결 차단

새 연결을 차단하는 이유는, 새 연결이 새 Delta Synchronization 트래픽의 주 원천 이기 때문입니다. 높은 속도로 새 트래픽이 계속 처리되면 Delta Synchronization이 위험해질 수 있습니다. 이때 클러스터 로그와 /var/log/messages 에 다음 오류가 남습니다.

State synchronization is in risk

멤버를 지나는 트래픽 양을 줄이면 Delta Synchronization 메커니즘을 보호할 수 있습니다(sk43896 참고). 다음 커널 파라미터로 동작을 제어합니다.

커널 파라미터설명
fw_sync_block_new_conns멤버가 높은 부하를 감지하고 새 연결 차단을 시작할지 제어합니다. 동기화 송신 큐가 fw_sync_buffer_threshold 값을 넘어 차기 시작하면 부하가 높다고 봅니다. 차단을 켜려면 값을 0으로, 끄려면 −1(반드시 16진수 0xFFFFFFFF 사용)로 설정합니다(−1이 기본값).
fw_sync_buffer_threshold새 연결을 차단하기 전 버퍼가 찰 수 있는 최대 백분율. 기본값은 80%, 버퍼 크기는 512입니다. 기본적으로 연속 410개 이상 의 패킷이 ACK 없이 전송되면 새 연결이 드롭됩니다.
fw_sync_allowed_protocols차단 상태에서 열 수 있는 연결 종류를 결정합니다. 값은 아래 플래그 값들을 더한 합 입니다.

플래그 값 표는 이렇습니다.

플래그
ICMP_CONN_ALLOWED1
TCP_CONN_ALLOWED2 (data 연결 제외)
UDP_CONN_ALLOWED4 (data 연결 제외)
TCP_DATA_CONN_ALLOWED8 (제어 연결이 이미 맺어졌거나 허용되어야 함)
UDP_DATA_CONN_ALLOWED16 (제어 연결이 이미 맺어졌거나 허용되어야 함)

기본값은 24 로, TCP_DATA_CONN_ALLOWED(8)와 UDP_DATA_CONN_ALLOWED(16)의 합입니다. 즉 부하 상태에서 기본적으로 TCP·UDP data 연결만 열 수 있습니다.

Non-Monitored 인터페이스 정의

Non-Monitored 인터페이스 는 ClusterXL이 감시하지 않는 멤버 인터페이스입니다. 어떤 인터페이스가 오랫동안 다운되어 있는데도 멤버를 계속 Active로 유지하고 싶을 때 이렇게 정의합니다.

  1. SmartConsole로 Management Server에 접속합니다.
  2. 왼쪽 패널에서 Gateways & Servers 를 클릭합니다.
  3. 클러스터 객체를 엽니다.
  4. 왼쪽 트리에서 Network Management 를 클릭합니다.
  5. 오래 다운된 인터페이스를 선택하고 Edit 을 클릭합니다.
  6. Network Type 영역에서 Private 을 선택합니다.
  7. OK 를 클릭합니다.
  8. 클러스터 객체에 Access Control Policy를 설치합니다.

Policy Update Timeout 구성

클러스터에 정책을 설치하면, 멤버들은 실제로 정책을 적용하기 전에 모두 같은 정책을 받았는지 확인하는 협상 과정 을 거칩니다. 이 협상에는 타임아웃이 있어, 한 멤버가 다른 멤버의 응답을 무한정 기다리지 않게 합니다(예: 정책 설치 중 다른 멤버가 다운될 때 유용).

규칙이 아주 많은 정책, 멤버가 둘보다 많은 클러스터, 느린 멤버 같은 상황에서는 정책 설치가 오래 걸려 이 타임아웃이 너무 일찍 만료 될 수 있습니다. 이때 커널 파라미터 fwha_policy_update_timeout_factor 로 타임아웃을 조정합니다. 기본값은 1이며 대부분의 구성에 충분합니다. 위 상황이라면 값을 2로 설정하면 됩니다.

Enhanced 3-Way TCP Handshake Enforcement(강화된 3-way 핸드셰이크 강제)

TCP 연결을 여는 3-way 핸드셰이크에 대한 표준 강제는 단방향 stickiness 를 보장해 적절한 보안을 줍니다 — 즉 SYN-ACK이 항상 SYN 뒤에 오도록 보장합니다. 하지만 ACK이 항상 SYN-ACK 뒤에 오거나 첫 데이터 패킷이 ACK 뒤에 오는 것까지는 보장하지 않습니다. 모든 out-of-state 패킷을 거부 하는 더 엄격한 정책을 원한다면, 모든 TCP 연결 개시 패킷이 올바른 순서(SYN → SYN-ACK → ACK → 데이터)로 도착하도록 동기화 메커니즘을 구성할 수 있습니다.

강화된 강제 켜기:

  1. Management Server에 연결된 모든 SmartConsole 창을 닫습니다.
  2. Database Tool(GuiDBEdit Tool) 로 이 클러스터를 관리하는 Management Server에 접속합니다.
  3. 왼쪽 위 창에서 Table > Network Objects > network_objects 로 갑니다.
  4. 오른쪽 위 창에서 클러스터 객체를 선택합니다(Class Name 열에 gateway_cluster).
  5. CTRL+F(또는 Search > Find)를 누릅니다.
  6. Find 창에 다음을 붙여 넣고 Find Next: sync_tcp_handshake_mode
  7. 아래 창에서 sync_tcp_handshake_mode 속성을 우클릭 → Edit.
  8. complete_sync 를 고르고 OK.
  9. File > Save All 로 저장합니다.
  10. Database Tool을 닫습니다.
  11. SmartConsole로 Management Server에 접속합니다.
  12. 클러스터 객체에 Access Control Policy를 설치합니다.

TCP 3-way 핸드셰이크 동기화 모드:

모드설명
Minimum sync기본 모드. 3-way 핸드셰이크를 강제하지 않습니다. 이 경우 보안을 양보하더라도 최상의 연결성을 원하는 사용자에게 적합합니다.
Complete sync모든 3-way 핸드셰이크 패킷을 Sync-and-ACK하고 핸드셰이크를 강제합니다. 연결 수립이 상당히 느려 집니다. 다음 패킷이 어디로 갈지 알 수 없는 경우(예: 타사 클러스터)에 쓸 수 있습니다.
Smart sync대부분의 경우 SYN과 SYN-ACK을 같은 멤버가 봤다면 그 연결은 "sticky"하다고 가정할 수 있습니다. ClusterXL은 Connections Table 레코드에 플래그 하나를 추가로 둡니다 — "이 멤버가 3-way 핸드셰이크 패킷을 보면 다른 모든 멤버에 sync하라". SYN이 도착하면 그것을 본 멤버가 연결을 기록하고 자기 플래그를 끄며, 다른 모든 멤버는 동기화되고 post-sync 핸들러로 그들의 플래그가 켜집니다. 같은 멤버가 SYN-ACK도 보면 연결은 sticky이므로 다른 멤버에 알리지 않습니다. 그렇지 않으면 해당 멤버가(플래그가 켜져 있으므로) 다른 모든 멤버에 알리고, 원래 SYN을 본 멤버도 자기 플래그를 켜 모든 멤버가 플래그를 켜게 됩니다 — 이 경우 세 번째 패킷도 동기화됩니다. 가정이 틀려(한 멤버가 SYN·SYN-ACK을 모두 보고 다른 멤버가 세 번째 ACK을 봤다면) 세 번째 ACK은 다른 멤버에서 드롭되고, 주기적 sync와 TCP 재전송에 기대 핸드셰이크를 완료합니다. 이 모드는 최소 성능 비용으로 3-way 핸드셰이크 검증 을 원하는 Load Sharing 사용자에게 좋은 해법이며, HA에도 권장됩니다.

다른 서브넷에 클러스터 IP 두기

클러스터 Virtual IP 주소를 멤버의 물리 IP와 다른 서브넷 에 둘 수 있습니다. 그러면 네트워크는 클러스터를 네트워크 라우터처럼 동작하는 하나의 Security Gateway 로 보며, 내부 구조나 멤버의 물리 IP를 알지 못합니다.

다른 서브넷을 쓰는 장점:

  • 사용 가능한 IP가 부족한 기존 서브넷에 클러스터를 만들 수 있습니다.
  • 클러스터에 Virtual IP 하나만 쓰고 나머지 IP는 다른 서브넷에 둘 수 있습니다.
  • 멤버의 물리 IP를 클러스터 VIP 뒤에 "숨길" 수 있습니다 — NAT와 거의 같은 보안 효과입니다.

멤버에서 내부·외부 네트워크로 나가는 트래픽은 클러스터 VIP와 클러스터 MAC 뒤에 숨겨집니다. 클러스터 인터페이스에 할당되는 클러스터 MAC은 이렇습니다.

클러스터 모드MAC 주소
High AvailabilityActive 멤버 인터페이스의 MAC
Load Sharing Multicast클러스터 VIP의 Multicast MAC
Load Sharing UnicastPivot 멤버 인터페이스의 MAC

다른 서브넷을 쓰면 몇 가지 제약이 따릅니다("다른 서브넷의 클러스터 주소 제약" 절 참고).

다른 서브넷 클러스터 IP 구성 예시

이 예시에서 클러스터는 네트워크 172.16.6.0/24(Side "A", 외부)와 172.16.4.0/24(Side "B", 내부)를 분리합니다.

p.188
p.188
Side / 인터페이스네트워크Member_1Member_2
Side "A" eth0 (외부)192.168.1.0/24 (실제 IP)eth0 실제 IP 192.168.1.1/24eth0 실제 IP 192.168.1.2/24
Side "A" eth0 (외부)172.16.6.0/24 (VIP)eth0 VIP 172.16.6.100/24eth0 VIP 172.16.6.100/24
Side "B" eth1 (내부)192.168.2.0/24 (실제 IP)eth1 실제 IP 192.168.2.1/24eth1 실제 IP 192.168.2.2/24
Side "B" eth1 (내부)172.16.4.0/24 (VIP)eth1 VIP 172.16.4.100/24eth1 VIP 172.16.4.100/24
Cluster Sync eth2192.168.3.0/24eth2 실제 IP 192.168.3.1/24eth2 실제 IP 192.168.3.2/24

1) 멤버에서 인터페이스와 정적 경로 구성 — 각 멤버에서 인터페이스와 다음 정적 경로를 구성합니다.

  • 외부 네트워크 172.16.6.0의 next hop 게이트웨이는 로컬 인터페이스 eth0(192.168.1.x).
  • 내부 네트워크 172.16.4.0의 next hop 게이트웨이는 로컬 인터페이스 eth1(192.168.2.x).

Gaia Clish 예시(Member_1, eth0 IP는 이미 구성됨):

set static-route 172.16.6.0/24 nexthop gateway logical eth0 on
set static-route 172.16.6.0/24 scopelocal on
set interface eth1 ipv4-address 192.168.2.1 mask-length 24
set interface eth1 state on
set static-route 172.16.4.0/24 nexthop gateway logical eth1 on
set static-route 172.16.4.0/24 scopelocal on
set interface eth2 ipv4-address 192.168.3.1 mask-length 24
set interface eth2 state on
save config

Member_2(주소만 다름):

set static-route 172.16.6.0/24 nexthop gateway logical eth0 on
set static-route 172.16.6.0/24 scopelocal on
set interface eth1 ipv4-address 192.168.2.2 mask-length 24
set interface eth1 state on
set static-route 172.16.4.0/24 nexthop gateway logical eth1 on
set static-route 172.16.4.0/24 scopelocal on
set interface eth2 ipv4-address 192.168.3.2 mask-length 24
set interface eth2 state on
save config

2) SmartConsole에서 클러스터 객체 열기 — Management Server에 접속 → Gateways & Servers → 클러스터 객체 열기 → Network Management.

3) 외부 클러스터 인터페이스 eth0 구성 — eth0을 선택해 Edit.

  • General 영역: Network Type = Cluster, IPv4 = 172.16.6.100/24.
  • Member IPs 영역에서 Modify: Member_1 = 192.168.1.1/24, Member_2 = 192.168.1.2/24.
  • Topology 영역에서 ModifyOverrideThis Network (Internal)Specific → 드롭다운에서 New > Network Group 을 만듭니다. 그룹에 Side "A"의 네트워크를 담습니다.
    • 그룹 이름 예: SideA_All_Networks_eth0.
    • Side "A" 인터페이스의 실제 IP용 Network 객체(예: SideA_Real_Network_eth0, 192.168.1.0 / 255.255.255.0).
    • Side "A"의 Cluster VIP용 Network 객체(예: SideA_VIP_Network_eth0, 172.16.6.0 / 255.255.255.0).
  • 모든 창을 OK 로 닫습니다.

4) 내부 클러스터 인터페이스 eth1 구성 — eth0과 같은 방식으로 합니다.

  • General: Network Type = Cluster, IPv4 = 172.16.4.100/24.
  • Member IPs: Member_1 = 192.168.2.1/24, Member_2 = 192.168.2.2/24.
  • Topology → Override → This Network (Internal) → Specific → 새 Network Group SideB_All_Networks_eth1 을 만들고, 실제 IP용 SideB_Real_Network_eth1(192.168.2.0/255.255.255.0)과 VIP용 SideB_VIP_Network_eth1(172.16.4.0/255.255.255.0)을 담습니다.
  • 모든 창을 OK 로 닫습니다.

5) Sync 인터페이스 eth2 구성 — eth2를 선택해 Edit.

  • General: Network Type = Sync.
  • Member IPs: Member_1 = 192.168.3.1/24, Member_2 = 192.168.3.2/24.
  • OK 로 창과 Gateway Cluster Properties 창을 닫습니다.

6) 정책 설치 — SmartConsole 세션을 Publish하고, 클러스터 객체에 Access Control Policy를 설치합니다.

7) Side "A" 호스트의 기본 게이트웨이 — 모두 172.16.6.100/24.

8) Side "B" 호스트의 기본 게이트웨이 — 모두 172.16.4.100/24.

다른 서브넷 클러스터 주소의 제약

이 기능은 아직 ClusterXL의 모든 기능을 지원하지 못하며, 일부는 추가 구성이 필요하고 일부는 지원되지 않습니다.

멤버 사이 연결 — 멤버가 보내는 ARP Request가 클러스터 IP·MAC 뒤에 숨겨지므로, 한 멤버가 다른 멤버에 보낸 요청을 목적지 컴퓨터가 무시할 수 있습니다. 멤버끼리 통신하게 하려면 각 멤버에 다른 모든 멤버의 MAC을 담은 정적 ARP 를 구성해야 합니다. 멤버 사이 IP 패킷은 변형되지 않으므로 라우팅 테이블은 바꿀 필요가 없습니다.

"반쯤 지원하는(semi-supporting)" 하드웨어에서의 Load Sharing Multicast — 모든 네트워크 하드웨어가 multicast MAC을 다루지는 못하지만, 어떤 라우터는 그런 패킷을 통과시키면서도 multicast MAC이 든 ARP Reply는 처리하지 못합니다. 이런 라우터에서는 클러스터 MAC을 라우터 내부 테이블에 정적 ARP 항목 으로 구성해 통신하게 할 수 있습니다. 다른 서브넷을 쓸 때는, 이런 라우터가 multicast 출발지 MAC이 든 ARP Request에 응답하지 않으므로, 각 멤버에 라우터 MAC을 담은 정적 ARP 항목 을 구성해야 합니다. multicast MAC을 완전히 지원하는 라우터에서는 이 특수 절차가 필요 없습니다.

수동 Proxy ARP — Static NAT를 쓸 때, 클러스터는 뒤에 숨은 호스트를 자동으로 인식해 그들을 대신해 클러스터 MAC으로 ARP Reply를 보낼 수 있습니다(Automatic Proxy ARP). 하지만 VMAC 모드나 다른 서브넷을 쓰면 이 메커니즘이 동작하지 않으므로 proxy ARP를 수동으로 구성 해야 합니다. SmartConsole에서 Menu > Global properties > NAT Network Address Translation 으로 가서 Automatic ARP Configuration 을 끄고, $FWDIR/conf/local.arp 파일을 만듭니다(sk30197 참고).

클러스터 네트워크에서 멤버에 접속하기 — 고유 IP는 임의로 고를 수 있어, 그 주소가 클러스터 IP의 서브넷에서 접근 가능하다는 보장이 없습니다. 멤버의 고유 IP로 접근하려면, 접속하는 멤버에서 클러스터 IP를 고유 IP 서브넷의 기본 게이트웨이 로 하는 경로를 구성해야 합니다.

기존 클러스터에 멤버 추가하기

새 Cluster Member를 클러스터 객체에 추가

1) 새 Cluster Member 설치 — 추가할 새 멤버를 설치합니다(R82 Installation and Upgrade Guide의 클러스터 설치 장에서 "Install the Cluster Members" 단계만 따름).

2) 새 Cluster Member 구성 — 새 멤버에서:

  • a. 현재 클러스터 토폴로지에 맞게 인터페이스 IP를 구성·변경합니다(Gaia Portal 또는 Clish).
  • b. 현재 토폴로지에 맞게 정적 경로를 구성·변경합니다.
  • c. 명령줄에 접속합니다.
  • d. Gaia Clish 또는 Expert mode로 로그인합니다.
  • e. Check Point Configuration Tool을 시작합니다: cpconfig
  • f. Enable cluster membership for this gateway 옵션을 선택하고 y 로 확인합니다.
  • g. 새 멤버를 재부팅합니다.

3) SmartConsole에서 클러스터 객체 구성:

  • a. Management Server에 접속합니다.
  • b. Gateways & Servers 를 클릭합니다.
  • c. 기존 클러스터 객체를 엽니다.
  • d. Cluster Members 페이지에서 Add > New Cluster Member 를 클릭합니다.
  • e~h. General 탭에서 멤버 이름과 물리 IPv4 주소를 입력합니다(Management Server가 이 주소로 멤버에 연결할 수 있어야 함). 필요하면 IPv6 주소도 입력합니다.

4) 클러스터 상태 점검 — 각 멤버(기존·신규)에서 명령줄에 접속해 로그인한 뒤, 모든 멤버가 서로를 감지하고 상태에 합의하는지 확인합니다.

명령
Gaia Clishset virtual-system <VSID> 다음 show cluster state
Expert modecphaprob [-vs <VSID>] state

서로 감지하지 못하거나 상태에 합의하지 못하면 클러스터링을 재시작합니다 — 각 멤버 명령줄에서 로그인 후 다음을 실행합니다.

cphastart

재시작 뒤 다시 show cluster state(Clish) 또는 cphaprob [-vs <VSID>] state(Expert)로 상태 합의를 확인합니다.

기존 Security Gateway를 멤버로 추가

1) 기존 Security Gateway 구성 — 인터페이스 IP·정적 경로를 토폴로지에 맞게 구성하고, 명령줄에서 cpconfig 를 실행해 Enable cluster membership for this gateway 를 선택(y)한 뒤 재부팅합니다.

2) SmartConsole에서 클러스터 객체 구성:

  • a~d. Management Server 접속 → Gateways & Servers → 기존 클러스터 객체 열기 → Cluster Members.
  • e. Add > Add Existing Gateway 를 클릭하고, 다음 경고를 읽고 Yes:
  If you add <Name_of_Security_Gateway_object> to the
  cluster, it will be converted to a cluster member. Some
  settings will be lost.
  The following settings will still remain:
  -SIC
  -VPN
  -NAT (except for IP Pools)
  In order to revert the conversion, session must be
  discarded.
  Are you sure you want to continue?
  
  • f. 멤버 목록에서 새 멤버를 선택해 Edit.
  • g~h. NAT·VPN 탭에서 해당 설정을 구성합니다.
  • i. Network Management 에서 모든 인터페이스·IP가 올바른지 확인합니다.
  • j. OK.
  • k. Access Control Policy 를 설치합니다(모든 멤버에서 성공해야 함).
  • l. Threat Prevention Policy 를 설치합니다(모든 멤버에서 성공해야 함).

3) 클러스터 상태 점검 — 새 멤버 추가 때와 동일합니다. 각 멤버에서 상태 합의를 확인하고, 필요하면 cphastop / cphastart 로 클러스터링을 재시작한 뒤 다시 확인합니다.

기존 클러스터에서 멤버 제거하기

1) SmartConsole에서 클러스터 객체 구성:

  • a~d. Management Server 접속 → Gateways & Servers → 기존 클러스터 객체 열기 → Cluster Members.
  • e. Remove > Delete Cluster Member 를 클릭하고 확인합니다.

2) 클러스터링 재시작·상태 점검 — 남은 각 멤버에서 cphastop / cphastart 로 클러스터링을 재시작하고, show cluster state(Clish) 또는 cphaprob [-vs <VSID>] state(Expert)로 상태 합의를 확인합니다.

3) 제거된 멤버 구성 — 제거한 Security Gateway에서 명령줄에 접속해 cpconfig 를 실행한 뒤:

  • d. Disable cluster membership for this gateway 를 선택(y).
  • e. Secure Internal Communication 을 선택(y) → 새 Activation Key를 입력합니다(반드시 적어 두세요).
  • f. cpconfig 메뉴를 빠져나갑니다.
  • g. Security Gateway를 재부팅합니다.

4) 제거된 게이트웨이와 SIC 수립 — 제거한 게이트웨이를 계속 쓰려면 SIC를 다시 맺습니다 — Management Server에 접속해 새 Security Gateway 객체를 만들고(New > Gateway 등), 화면 지시에 따라 앞서 cpconfig에서 입력한 것과 같은 Activation Key 를 입력한 뒤 OK, 세션 Publish, Access Control·Threat Prevention 정책을 설치합니다.

클러스터의 ISP Redundancy(ISP 이중화)

ISP Redundancy 는 멤버를 여러 ISP 링크 로 인터넷에 연결합니다. ISP 링크를 감시해 그때그때 가장 좋은 링크 를 고릅니다.

  • ISP Redundancy는 외부 인터페이스가 최소 2개 필요하고 최대 10개 까지 지원합니다. 2개 초과로 구성하려면 Management Server와 클러스터가 R81.10 이상이어야 합니다.
  • ISP Redundancy는 내부 네트워크에서 출발해 인터넷으로 가는 트래픽을 위한 것입니다.
p.208
p.208

아래 표의 IP는 예시일 뿐입니다.

항목설명
1내부 네트워크
2스위치들
3Cluster Member A
3a내부 네트워크(10.10.10.0/24)에 연결된 클러스터 인터페이스 — IP 10.10.10.11, VIP 10.10.10.1
3bSync 네트워크(20.20.20.0/24)에 연결된 클러스터 인터페이스 — IP 20.20.20.11
3cISP A로 가는 스위치에 연결된 클러스터 인터페이스 — IP 30.30.30.11, VIP 30.30.30.1
3dISP B로 가는 스위치에 연결된 클러스터 인터페이스 — IP 40.40.40.11, VIP 40.40.40.1
4Cluster Member B
4a내부 네트워크에 연결 — IP 10.10.10.22, VIP 10.10.10.1
4bSync 네트워크에 연결 — IP 20.20.20.22
4cISP B로 가는 스위치에 연결 — IP 40.40.40.22, VIP 40.40.40.1
4dISP A로 가는 스위치에 연결 — IP 30.30.30.22, VIP 30.30.30.1
5ISP B
6ISP A
7인터넷

ISP Redundancy 모드

ISP Redundancy 모드는 내부 클라이언트에서 인터넷으로 나가는 연결 의 동작을 결정합니다.

모드설명
Load Sharing모든 링크로 연결 부하를 분산합니다. 들어오는 연결은 번갈아 처리됩니다. 링크별 상대 부하를 설정할 수 있어(빠른 링크에 더 많은 부하), 새 연결은 링크에 무작위로 배정됩니다. 한 링크가 죽으면 다른 링크가 부하를 떠맡습니다. 이 모드에서는 클러스터가 내부 서버 IP에 대한 DNS 요청에 두 ISP의 IP를 순서를 번갈아 답하므로, 들어오는 연결이 어느 ISP 링크로도 애플리케이션 서버에 도달할 수 있습니다.
Primary/Backup한 링크로만 연결합니다. Primary 링크가 죽으면 Backup으로 전환하고, Primary가 복구되면 새 연결을 다시 Primary에 배정합니다(기존 연결은 완료될 때까지 Backup에 남음). 이 모드에서는 클러스터가 연결이 시작된 같은 ISP 링크로 패킷을 되돌리므로, 들어오는 연결(인터넷 → DMZ·내부 서버)도 혜택을 봅니다.

나가는 연결(Outgoing)

모드설명
Load Sharing인터넷으로 나가는 트래픽이 ISP 링크들 사이에 분산됩니다. 링크별로 상대 가중치 를 설정할 수 있어, 더 빠른 링크에 더 많은 트래픽을 라우팅할 수 있습니다.
Primary/Backup나가는 트래픽은 활성 Primary 링크를 씁니다. Hide NAT 로 나가는 패킷의 출발지 주소를 패킷이 클러스터를 떠나는 인터페이스 주소로 바꿉니다. 그러면 돌아오는 패킷의 목적지가 올바른 링크 주소이므로 자동으로 같은 ISP 링크로 라우팅됩니다. 관리자가 Hide NAT 설정을 구성합니다.

들어오는 연결(Incoming)

외부 사용자가 들어오는 연결을 맺게 하려면 관리자가 이렇게 합니다.

  1. 각 애플리케이션 서버에 ISP마다 라우팅 가능한 IP 하나 를 줍니다.
  2. Static NAT 로 라우팅 가능한 주소를 실제 서버 주소로 번역합니다.

서버가 서로 다른 서비스(예: HTTP, FTP)를 다루면, 공개 서버 전부에 라우팅 가능한 IP만 쓰도록 NAT를 쓸 수 있습니다. 외부 클라이언트는 할당된 IP 중 하나를 쓰며, 연결하려면 서버의 DNS 이름을 올바른 IP로 해석할 수 있어야 합니다.

웹 서버 www.example.com에 ISP마다 IP가 할당됩니다 — ISP A에서 192.168.1.2, ISP B에서 172.16.2.2. ISP A 링크가 죽으면 192.168.1.2를 쓸 수 없으므로, 클라이언트는 www.example.com을 172.16.2.2로 해석할 수 있어야 합니다. 들어오는 연결은 이 순서로 맺어집니다.

  1. 외부 클라이언트가 www.example.com에 접속하려고 DNS 질의(Type A)를 보내면, 그 질의가 클러스터에 도달합니다. 클러스터에는 자기 도메인의 서버에 대한 DNS 질의를 가로채는 내장 mini-DNS 서버 가 있습니다.
  2. ISP 링크에 속한 인터페이스에 도착한 DNS 질의를 클러스터가 가로챕니다.
  3. 클러스터가 호스트 이름을 알아보면 다음 중 하나를 답합니다 — Primary/Backup 모드에서는 Primary 링크가 살아 있는 한 Primary 링크의 IP만, Load Sharing 모드에서는 두 IP를 순서를 번갈아 답합니다.
  4. 클러스터가 호스트를 알아보지 못하면(예: 호스트 이름을 모름) 질의를 원래 목적지나 example.com 도메인의 DNS 서버로 넘깁니다.
  5. 외부 클라이언트가 답을 받아 연결을 열고, 패킷이 클러스터에 도달하면 Static NAT로 목적지 IP(192.168.1.2 또는 172.16.2.2)를 실제 서버 IP 10.0.0.2 로 번역합니다.
  6. 클러스터는 연결이 시작된 같은 ISP 링크 로 서버의 응답 패킷을 클라이언트에게 라우팅합니다.

클러스터에 ISP Redundancy 구성하기

  1. SmartConsole로 Management Server에 접속합니다.
  2. Gateways & Servers 를 클릭합니다.
  3. 해당 클러스터 객체를 엽니다.
  4. Other > ISP Redundancy 를 클릭합니다.
  5. Support ISP Redundancy 를 선택합니다.
  6. 이중화 모드(Load Sharing 또는 Primary/Backup)를 선택합니다.
  7. ISP 링크를 구성 합니다(최소 2개, 최대 10개. 2개 초과는 R81.10 이상 필요).

ISP 데이터(링크 속도, next hop IP)를 준비합니다. Network Management 에 Topology가 "External"인 인터페이스가 둘 이상 있으면 자동, 하나뿐 이면 수동으로 구성합니다.

자동 구성: Other > ISP Redundancy → Set initial configuration 클릭(ISP 링크가 자동 추가됨) → Primary/Backup 모드라면 Primary 인터페이스가 목록 맨 앞에 오도록 오른쪽 화살표로 순서를 맞춤 → OK.

수동 구성: Other > ISP Redundancy → ISP Links 영역에서 AddGeneral 탭에서 링크 이름 입력(이 이름은 ISP Redundancy 명령에 쓰임) → 이 ISP 링크의 Interface 선택 → Next Hop IP Address 구성(External 인터페이스가 둘 이상이면 비워 두고 Get from routing table, 하나뿐이면 링크마다 다른 next hop 라우터 지정) → Load Sharing 모드라면 Weight 입력(링크가 둘이면 각 50, 셋이면 각 33, 넷이면 각 25 … 합이 항상 100이 되도록. 더 빠른 링크는 값을 올리고 나머지는 내림) → Advanced 탭에서 링크 동작 확인용 모니터링 호스트를 Selected hosts 에 추가 → OK. 8. 클러스터를 DNS 서버로 구성 합니다. 클러스터(또는 그 뒤의 DNS 서버)가 DNS 질의에 응답해 DMZ·내부 서버 IP를 해석해야 합니다. 각 ISP에서 공개 IP를 얻고, 없으면 도메인을 등록해 인터넷에서 DNS 서버에 접근 가능하게 합니다.

  • 클러스터는 자기 도메인 웹 서버에 대한 DNS 질의(Type A)를 가로챕니다.
    • 호스트를 알아보면 — Load Sharing 모드에서는 모든 ISP 링크의 IP를 순서를 번갈아, Primary/Backup 모드에서는 활성 ISP 링크의 IP 를 답합니다.
    • 알아보지 못하면 질의를 원래 목적지나 도메인 DNS 서버로 넘깁니다.

DNS 서버 켜기: Other > ISP Redundancy → Enable DNS Proxy 선택 → Configure → DMZ·웹 서버 추가(각 서버에 ISP마다 공개 IP 설정) → DNS TTL 에 초 단위 입력(인터넷 DNS 서버가 이 시간보다 오래 데이터를 캐시하지 못함) → OK → Static NAT로 공개 IP를 실제 서버 IP로 번역 → 다음 Access Control 규칙을 정의합니다.

NameSourceDestinationVPNServices & ApplicationsActionTrackInstall On
DNS Proxy해당 출발지해당 DNS 서버Anydomain_udpAcceptNonePolicy Targets

도메인 등록·IP 받기: 각 ISP에 도메인을 등록하고, ISP에 DNS 서버의 구성된 IP를 알려 줍니다. DMZ의 각 서버에 ISP마다 공개 IP를 받고, SmartConsole의 Menu > Global properties > NAT - Network Address Translation 에서 Manual NAT rules 영역의 Translate destination on client side 를 선택한 뒤 OK. 9. ISP Redundancy용 Access Control Policy 구성 — 정책은 ISP 링크를 통한 연결을 허용하고, 나가는 연결을 시작하는 네트워크 객체에 Automatic Hide NAT 가 적용되어야 합니다. 내부 네트워크 객체 속성에서 NAT > Add Automatic Address Translation RulesHide behind the gateway 선택 → OK. 공개 접근 서버(웹·DNS·DMZ)용 규칙도 정의합니다.

  • 클러스터용으로 ISP마다 공개 IP가 하나면 Static NAT 를 정의하고, 특정 서버에 특정 서비스를 허용합니다. 예시(웹 서버·DNS 서버용 수동 Static 규칙):
Original SourceOriginal DestinationOriginal ServicesTranslated SourceTranslated DestinationTranslated ServicesInstall OnComment
Any웹 서버 IP의 Host 객체http= Original= Original= OriginalPolicy TargetsIncoming Web - ISP A, S 50.50.50.2
Any웹 서버 IP의 Host 객체http= Original= Original= OriginalPolicy TargetsIncoming Web - ISP B, S 60.60.60.2
AnyDNS 서버 IP의 Host 객체domain_udp= Original= Original= OriginalPolicy TargetsIncoming DNS - ISP A, S 50.50.50.3
AnyDNS 서버 IP의 Host 객체domain_udp= Original= Original= OriginalPolicy TargetsIncoming DNS - ISP B, S 60.60.60.3

ISP Redundancy와 VPN

ISP Redundancy를 켜면 VPN 암호화 연결이 ISP 링크 장애에서도 살아남습니다. ISP Redundancy 페이지의 설정이 IPsec VPN > Link Selection 페이지 설정보다 우선합니다.

Check Point 피어와의 VPN용 ISP Redundancy 구성:

단계내용
1SmartConsole로 Management Server에 접속합니다.
2Gateways & Servers 를 클릭합니다.
3클러스터 객체를 엽니다.
4왼쪽 트리에서 Other > ISP Redundancy 로 갑니다.
5Apply settings to VPN traffic 을 선택합니다.
6왼쪽 트리에서 IPsec VPN > Link Selection 으로 갑니다.
7Use ongoing probing. Link redundancy mode 가 ISP Redundancy 모드(Primary/Backup이면 High Availability, 아니면 Load Sharing)를 보이는지 확인합니다. 이제 VPN Link Selection은 ISP Redundancy에 구성된 ISP만 probe합니다.

타사 피어와의 VPN용 ISP Redundancy 구성 — VPN 피어가 Check Point 게이트웨이가 아니면 VPN이 실패하거나, 타사 장비가 죽은 ISP 링크로 계속 암호화 트래픽을 보낼 수 있습니다.

  • 타사 VPN 피어가 보조 ISP 링크에서 오는 암호화 트래픽을 Check Point 클러스터에서 온 것으로 인식 하게 합니다.
  • ISP Redundancy 구성을 바꿔 다음 Check Point 기술을 쓰지 않게 합니다.
    • Use Probing — Link Selection이 다른 옵션을 쓰게 합니다.
    • Load Sharing, Service Based Link Selection, Route based probing 은 Check Point 게이트웨이/클러스터/Security Group에서만 동작합니다. 쓰면 게이트웨이/멤버/Security Group이 타사 피어에 링크 하나로만 연결하며, prefix 길이가 가장 길고 metric이 가장 낮은 링크를 씁니다.

CLI에서 ISP Redundancy 제어

ISP 링크 상태 강제fw isp_link 명령으로 링크 상태를 Up/Down으로 강제합니다. 설치·배포 테스트나, 게이트웨이가 링크 상태를 잘못 인식할 때(링크가 죽었는데 up으로 봄) 실제 상태를 인식시키는 데 씁니다.

  • 멤버에서:
  fw isp_link <SmartConsole의 ISP 링크 이름> {up | down}
  
  • Management Server에서:
  fw isp_link <Cluster Member 객체 이름> <SmartConsole의 ISP 링크 이름> {up | down}
  

자세히는 R82 CLI Reference Guide의 fw > fw isp_link 절을 보세요.

ISP Redundancy 스크립트 — 멤버가 시작하거나 ISP 링크 상태가 바뀌면 멤버에서 $FWDIR/bin/cpisp_update 스크립트가 실행됩니다. 이 스크립트는 멤버의 기본 경로(default route)를 바꿉니다.

클러스터 배포에서의 동적 라우팅 프로토콜

ClusterXL은 Gaia OS의 일부로서 동적 라우팅(Unicast·Multicast) 프로토콜을 지원합니다. 네트워크 인프라가 클러스터된 게이트웨이를 하나의 논리 entity 로 보므로, 멤버 장애가 인프라에 투명하게 처리되어 연쇄 효과(ripple effect) 를 일으키지 않습니다.

Router IP Address — 모든 멤버가 클러스터 Virtual IP 를 Router IP로 씁니다.

Routing Table Synchronization — 라우팅 정보는 FIB(Forwarding Information Base) Manager 프로세스로 멤버 사이에 동기화됩니다. 페일오버 때 트래픽 중단을 막기 위함이며 Load Sharing·HA 모드에 쓰입니다. FIB Manager는 라우팅 정보를 책임지며 "FIB" 라는 Critical Device로 등록됩니다. 라우팅 데이터베이스가 동기화에서 벗어나면 이 Critical Device가 상태를 "problem"으로 보고하고, 그 결과 FIB Manager가 다시 동기화될 때까지 멤버가 "DOWN" 상태가 됩니다.

Wait for Clustering — 동적 라우팅 프로토콜이나 DHCP Relay가 클러스터에 구성되면, Wait for Clustering 옵션을:

  • 다음 모드에서는 켜야 합니다 — ClusterXL High Availability, Load Sharing Unicast, Load Sharing Multicast, VSX High Availability, VSX Load Sharing(VSLS).
  • 다음 모드에서는 꺼야 합니다 — Gaia OS의 VRRP Cluster.

자세히는 sk92322를 보세요.

Failure Recovery — ClusterXL의 동적 라우팅은 페일오버 때 연쇄 효과를 피하려고, 라우터가 유지보수 모드를 빠져나갔다 고 이웃 라우터에 알립니다. 그러면 이웃 라우터는 다른 라우터에 알리지 않고 클러스터와의 관계를 다시 맺습니다. 이 restart 프로토콜은 주요 네트워킹 벤더가 널리 채택했습니다. Check Point 동적 라우팅과 호환되는 RFC·draft는 이렇습니다.

프로토콜RFC 또는 Draft
OSPF Graceful restartRFC 3623
OSPF LLSRFC 5613
BGP Graceful restartRFC 4724