Blog >> Linux >> Whitepapers.

bonding 인터페이스 라우팅 정상화와 firewalld 정책 정리 150 150 phobe

bonding 인터페이스 라우팅 정상화와 firewalld 정책 정리

현재 네트워크 운영은 인터페이스를 4개 사용, 내부 2개 -> bond0, 외부 2개 -> bond1
네트워크 본딩 상태의 불필요한 라우팅을 정리하고, ipv6 자동 사용을 억제해 도메인 접속 시 지연을 없앰.
L2 본딩 및 L3 외부 라우팅을 정리 해봄.

구분주요 설정 항목최종 상태비고
방화벽 (firewalld)forwardno인터페이스 간 불필요한 패킷 중계 검사 차단
서비스 정리dhcpv6-client 제거미사용 IPv6 UDP 546 포트 정리
외부망 (bond1)ipv4.never-defaultno시스템 공식 기본 게이트웨이 역할 수행
ipv6.methoddisabled인터페이스 IPv6 완전 차단
ipv6.never-defaultyesIPv6 기본 경로 생성 방지
내부망 (bond0)ipv4.never-defaultyes내부 게이트웨이의 기본 경로 승격 원천 차단
ipv6.methoddisabled인터페이스 IPv6 완전 차단
ipv6.never-defaultyesIPv6 기본 경로 생성 방지
# forward: yes가 필요한 본질적인 환경은
# ① 서버가 사내 '소프트웨어 공유기(NAT 라우터)' 역할을 할 때
# ② VPN 서버를 구동할 때 (WireGuard, OpenVPN 등)
# ③ 가상화(KVM/libvirt) 및 컨테이너 브리지 네트워크
# ④ 내부 세그먼트 간 라우팅 중계
# 서버가 다른 장비나 네트워크를 대신해 패킷을 넘겨주는 라우터(공유기/게이트웨이) 역할을 수행할 때 이므로
firewall-cmd --zone=internal --remove-forward --permanent
firewall-cmd --zone=public --remove-forward --permanent

# 적용을 위한 방화벽 리로드
firewall-cmd --reload

# 설정 결과 확인
~]# firewall-cmd --zone=public --list-all | grep forward
  forward: no
  forward-ports
  
# 불필요한 cockpit이나 dhcpv6-client 서비스를 방화벽에서 정리.
# 모든 구역에서 불필요한 서비스 영구 제거
firewall-cmd --zone=internal --remove-service=dhcpv6-client --permanent
firewall-cmd --zone=public --remove-service=dhcpv6-client --permanent
firewall-cmd --zone=internal --remove-service=cockpit --permanent
firewall-cmd --zone=public --remove-service=cockpit --permanent

# 방화벽 설정 다시 로드 (기존 연결 유지)
firewall-cmd --reload

# 확인
firewall-cmd --zone=internal --list-services
firewall-cmd --zone=public --list-services

# bond0.nmconnection 파일 수동 편집이 가능함.
# 파일 권한(chmod 600): 보안상 소유자 읽기/쓰기(root:root, 600)만 허용.
# 권한이 조금이라도 풀려 있으면 NetworkManager가 해당 파일을 위험 파일로 간주해 무시해 버립니다.
# 설정 리로드(nmcli connection reload): 
# 수동 편집 후에는 NetworkManager가 파일 변경을 즉시 인지하지 못하므로,
# 반드시 nmcli connection reload를 실행해 디스크에서 메모리로 설정을 다시 읽어 들여야 한다.

# bond0의 IPv6 기능을 완전히 비활성화(disabled)
nmcli connection modify bond0 ipv6.method "disabled"

# bond1의 IPv6 기능을 완전히 비활성화(disabled)
nmcli connection modify bond1 ipv6.method "disabled"

# 설정 파일 안전 리로드 (인터페이스 재시작 없이 메모리에 반영)
nmcli connection reload

# IPv6 주소 소멸 여부 확인:
ip -6 addr show dev bond1
ip -6 addr show dev bond0

# 커널의 IPv6 비활성화 플래그 상태 확인 (0: 활성, 1: 비활성)
~]# sysctl net.ipv6.conf.bond1.disable_ipv6
net.ipv6.conf.bond1.disable_ipv6 = 1
~]# sysctl net.ipv6.conf.bond0.disable_ipv6
net.ipv6.conf.bond0.disable_ipv6 = 1

# HEL/Rocky 9~10 버전부터는 연결 프로필 파일(키파일)인 
# /etc/NetworkManager/system-connections/*.nmconnection의 내용을 바탕으로 생성.

#================================ 상태 확인 ================================#
~]# cat /etc/NetworkManager/system-connections/bond0.nmconnection
[connection]
id=bond0
uuid=dc803ff3-12d1-41da-b202-023495455585
type=bond
interface-name=bond0
timestamp=1792494517
zone=internal

[bond]
downdelay=0
miimon=1
mode=balance-rr
updelay=0

[ipv4]
address1=192.*****/24
dns=168.*****;168.*****;
dns-search=gldigital.co.kr;
may-fail=false
method=manual
never-default=true

[ipv6]
addr-gen-mode=stable-privacy
method=disabled
never-default=true

[proxy]

~]# cat /etc/NetworkManager/system-connections/bond1.nmconnection
[connection]
id=bond1
uuid=758dd47e-ef52-4b4f-804c-73ee8d2ed71e
type=bond
interface-name=bond1
timestamp=1792494671
zone=public

[ethernet]

[bond]
downdelay=0
miimon=1
mode=balance-rr
updelay=0

[ipv4]
address1=121.*****/27
dns=8.8.8.8;168.*****;168.*****;
dns-search=gldigital.co.kr;
gateway=121.*****
may-fail=false
method=manual

[ipv6]
addr-gen-mode=stable-privacy
method=disabled
never-default=true

[proxy]

#================================ 상태 확인 ================================#

# 네트워크 메트릭(Metric)은 '높은 값'이 아니라 '낮은 값'이 우선순위를 갖는다는 점.
# 서버는 전체 시스템에서 '인터넷으로 나가는 출구(Default Gateway)'를 단 하나만 가져야 정상이며,
# bond0에 게이트웨이가 없어도 bond0 인터페이스나 내부 통신에 아무런 문제가 발생하지 않는다.
~]# ip route show default
default via 121.***** dev bond1 proto static metric 300
default via 192.***** dev bond0 proto static metric 301

# 커널 라우팅 테이블에서 불필요한 내부 게이트웨이 bond0 즉시 삭제
ip route del default via 192.***** dev bond0 2>/dev/null || true

# 두개의 게이트웨이를 한개만 지정해서 만약의 접속 불량을 차단.
# IPv4 기본 게이트웨이 확인 (bond1 단독이어야 함)
ip route show default

# IPv6 기본 게이트웨이 확인 (비어 있어야 함)
ip -6 route show default

# nmcli connection modify와 reload만 사용하면 인터페이스가 끊기거나 재협상되지 않고 디스크 설정만 안전하게 갱신

# bond0에 대해 IPv4, IPv6 기본 게이트웨이 생성 차단
nmcli connection modify bond0 ipv4.never-default yes
nmcli connection modify bond0 ipv6.never-default yes

# bond1에 대해 IPv6 기본 게이트웨이 생성 차단
nmcli connection modify bond1 ipv6.never-default yes

# 설정 파일 안전 리로드 (인터페이스 재시작 없이 메모리에 반영)
nmcli connection reload

# ip -6 route show default 명령어로 IPv6 기본 경로가 없는지 최종 확인 후
# bond0에 대해 IPv4, IPv6 기본 게이트웨이 생성 차단 확인
# bond1에 대해 IPv6 기본 게이트웨이 생성 차단 확인
~]# nmcli connection show bond0 | grep -i never-default
ipv4.never-default:                     예
ipv6.never-default:                     예
~]# nmcli connection show bond1 | grep -i never-default
ipv4.never-default:                     아니오
ipv6.never-default:                     예

# NetworkManager 프로필 속성 조회
nmcli connection show bond0 | grep -i ipv6.method
nmcli connection show bond1 | grep -i ipv6.method

# 설정 파일 직접 확인:
grep -i "method=" /etc/NetworkManager/system-connections/bond1.nmconnection

# 현재 실행 중인 커널/네트워크(런타임) 상태 확인
# 1. bond에 여전히 IPv6 주소(fe80::)가 살아있는지 확인
ip -6 addr show dev bond0
ip -6 addr show dev bond1

# 2. 커널의 IPv6 비활성화 플래그 상태 확인 (0: 활성, 1: 비활성)
sysctl net.ipv6.conf.bond0.disable_ipv6
sysctl net.ipv6.conf.bond1.disable_ipv6
  • certbot wildcard SSL 인증서 설치 150 150 phobe certbot wildcard SSL 인증서 설치