21장. 대체 경로를 정의하도록 정책 기반 라우팅 구성

기본적으로 RHEL의 커널은 라우팅 테이블을 사용하여 대상 주소를 기반으로 네트워크 패킷을 전달할 위치를 결정합니다. 정책 기반 라우팅을 사용하면 복잡한 라우팅 시나리오를 구성할 수 있습니다. 예를 들어 소스 주소, 패킷 메타데이터 또는 프로토콜과 같은 다양한 기준에 따라 패킷을 라우팅할 수 있습니다.

참고

NetworkManager를 사용하는 시스템에서는 nmcli 유틸리티만 라우팅 규칙을 설정하고 특정 테이블에 경로를 할당하는 기능을 지원합니다.

21.1. nmcli를 사용하여 특정 서브넷에서 다른 기본 게이트웨이로 트래픽을 라우팅

정책 기반 라우팅을 사용하여 특정 서브넷의 트래픽에 대해 다른 기본 게이트웨이를 구성할 수 있습니다. 예를 들어 기본적으로 기본 경로를 사용하여 모든 트래픽을 인터넷 공급자 A로 라우팅하는 라우터로 RHEL을 구성할 수 있습니다. 그러나 내부 워크스테이션 서브넷에서 수신되는 트래픽은 공급자 B로 라우팅됩니다.

이 절차에서는 다음과 같은 네트워크 토폴로지를 가정합니다.

policy based routing

사전 요구 사항

  • 시스템은 NetworkManager 를 사용하여 네트워크를 구성합니다(기본값).
  • 절차에서 설정하려는 RHEL 라우터에는 네 개의 네트워크 인터페이스가 있습니다.

    • enp7s0 인터페이스는 공급자 A의 네트워크에 연결되어 있습니다. 공급자 네트워크의 게이트웨이 IP는 198.51.100.2 이며 네트워크는 /30 네트워크 마스크를 사용합니다.
    • enp1s0 인터페이스는 공급자 B의 네트워크에 연결되어 있습니다. 공급자 네트워크의 게이트웨이 IP는 192.0.2.2 이며 네트워크는 /30 네트워크 마스크를 사용합니다.
    • enp8s0 인터페이스는 내부 워크스테이션이 있는 10.0.0.0/24 서브넷에 연결되어 있습니다.
    • enp9s0 인터페이스는 회사 서버를 사용하여 203.0.113.0/24 서브넷에 연결됩니다.
  • 내부 워크스테이션 서브넷의 호스트는 기본 게이트웨이로 10.0.0.1 을 사용합니다. 이 절차에서는 이 IP 주소를 라우터의 enp8s0 네트워크 인터페이스에 할당합니다.
  • 서버 서브넷의 호스트는 기본 게이트웨이로 203.0.113.1 을 사용합니다. 이 절차에서는 이 IP 주소를 라우터의 enp9s0 네트워크 인터페이스에 할당합니다.
  • firewalld 서비스가 활성화되어 있고 활성화됩니다.

절차

  1. 공급자 A에 네트워크 인터페이스를 구성합니다.

    # nmcli connection add type ethernet con-name Provider-A ifname enp7s0 ipv4.method manual ipv4.addresses 198.51.100.1/30 ipv4.gateway 198.51.100.2 ipv4.dns 198.51.100.200 connection.zone external

    nmcli connection add 명령은 NetworkManager 연결 프로필을 생성합니다. 명령은 다음 옵션을 사용합니다.

    • 유형 이더넷: 연결 유형이 이더넷임을 정의합니다.
    • con-name connection_name: 프로필의 이름을 설정합니다. 의미 있는 이름을 사용하여 혼동을 피하십시오.
    • ifname network_device: 네트워크 인터페이스를 설정합니다.
    • ipv4.method manual: 정적 IP 주소를 구성할 수 있습니다.
    • ipv4.addresses IP_address/subnet_mask: IPv4 주소 및 서브넷 마스크를 설정합니다.
    • ipv4.gateway IP_address: 기본 게이트웨이 주소를 설정합니다.
    • ipv4.dns IP_of_DNS_server: DNS 서버의 IPv4 주소를 설정합니다.
    • connection.zone firewalld_zone: 네트워크 인터페이스를 정의된 firewalld 영역에 할당합니다. firewalld외부 영역에 할당된 인터페이스에 대해 자동으로 마스커레이딩을 활성화합니다.
  2. 네트워크 인터페이스를 공급자 B로 구성합니다.

    # nmcli connection add type ethernet con-name Provider-B ifname enp1s0 ipv4.method manual ipv4.addresses 192.0.2.1/30 ipv4.routes "0.0.0.0/0 192.0.2.2 table=5000" connection.zone external

    이 명령은 ipv4.gateway 대신 ipv4.routes 매개변수를 사용하여 기본 게이트웨이를 설정합니다. 이 연결은 기본값과 다른 라우팅 테이블(5000)에 이 연결에 대한 기본 게이트웨이를 할당하는 데 필요합니다. NetworkManager는 연결이 활성화되면 이 새 라우팅 테이블을 자동으로 생성합니다.

  3. 네트워크 인터페이스를 내부 워크스테이션 서브넷에 구성합니다.

    # nmcli connection add type ethernet con-name Internal-Workstations ifname enp8s0 ipv4.method manual ipv4.addresses 10.0.0.1/24 ipv4.routes "10.0.0.0/24 table=5000" ipv4.routing-rules "priority 5 from 10.0.0.0/24 table 5000" connection.zone trusted

    이 명령은 ipv4.routes 매개변수를 사용하여 ID 5000 이 있는 라우팅 테이블에 정적 경로를 추가합니다. 10.0.0.0/24 서브넷에 대한 이 고정 경로는 로컬 네트워크 인터페이스의 IP를 공급자 B(192.0.2.1)에 다음 홉으로 사용합니다.

    또한 명령에서는 ipv4.routing-rules 매개변수를 사용하여 10.0.0.0/24 서브넷의 트래픽을 테이블 5000 으로 라우팅하는 우선 순위 5 인 라우팅 규칙을 추가합니다. 낮은 값은 우선 순위가 높습니다.

    ipv4.routing-rules 매개변수의 구문은 ip rule add 명령과 동일합니다. 단, ipv4.routing-rules 에는 항상 우선 순위를 지정해야 합니다.

  4. 네트워크 인터페이스를 서버 서브넷에 구성합니다.

    # nmcli connection add type ethernet con-name Servers ifname enp9s0 ipv4.method manual ipv4.addresses 203.0.113.1/24 connection.zone trusted

검증

  1. 내부 워크스테이션 서브넷의 RHEL 호스트에서 다음을 수행합니다.

    1. traceroute 패키지를 설치합니다.

      # dnf install traceroute
    2. traceroute 유틸리티를 사용하여 인터넷의 호스트에 대한 경로를 표시합니다.

      # traceroute redhat.com
      traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets
       1  10.0.0.1 (10.0.0.1)     0.337 ms  0.260 ms  0.223 ms
       2  192.0.2.1 (192.0.2.1)   0.884 ms  1.066 ms  1.248 ms
       ...

      명령의 출력은 라우터가 공급자 B의 네트워크인 192.0.2.1 을 통해 패킷을 전송함을 표시합니다.

  2. 서버 서브넷의 RHEL 호스트에서 다음을 수행합니다.

    1. traceroute 패키지를 설치합니다.

      # dnf install traceroute
    2. traceroute 유틸리티를 사용하여 인터넷의 호스트에 대한 경로를 표시합니다.

      # traceroute redhat.com
      traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets
       1  203.0.113.1 (203.0.113.1)    2.179 ms  2.073 ms  1.944 ms
       2  198.51.100.2 (198.51.100.2)  1.868 ms  1.798 ms  1.549 ms
       ...

      명령의 출력은 라우터가 공급자 A의 네트워크인 198.51.100.2 를 통해 패킷을 전송함을 표시합니다.

문제 해결 단계

RHEL 라우터에서 다음을 수행합니다.

  1. 규칙 목록을 표시합니다.

    # ip rule list
    0:	from all lookup local
    5:	from 10.0.0.0/24 lookup 5000
    32766:	from all lookup main
    32767:	from all lookup default

    기본적으로 RHEL에는 로컬, 기본 및 기본 테이블에 대한 규칙이 포함되어 있습니다.

  2. 5000 에 경로를 표시 :

    # ip route list table 5000
    0.0.0.0/0 via 192.0.2.2 dev enp1s0 proto static metric 100
    10.0.0.0/24 dev enp8s0 proto static scope link src 192.0.2.1 metric 102
  3. 인터페이스 및 방화벽 영역을 표시합니다.

    # firewall-cmd --get-active-zones
    external
      interfaces: enp1s0 enp7s0
    trusted
      interfaces: enp8s0 enp9s0
  4. 외부 영역에 masquerading이 활성화되어 있는지 확인합니다.

    # firewall-cmd --info-zone=external
    external (active)
      target: default
      icmp-block-inversion: no
      interfaces: enp1s0 enp7s0
      sources:
      services: ssh
      ports:
      protocols:
      masquerade: yes
      ...

추가 리소스