8.9. 네트워크 RHEL 시스템 역할을 사용하여 특정 서브넷에서 다른 기본 게이트웨이로 트래픽을 라우팅
정책 기반 라우팅을 사용하여 특정 서브넷의 트래픽에 대해 다른 기본 게이트웨이를 구성할 수 있습니다. 예를 들어 기본적으로 기본 경로를 사용하여 모든 트래픽을 인터넷 공급자 A로 라우팅하는 라우터로 RHEL을 구성할 수 있습니다. 그러나 내부 워크스테이션 서브넷에서 수신된 트래픽은 공급자 B로 라우팅됩니다.
정책 기반 라우팅을 원격으로 여러 노드에서 구성하려면 네트워크
RHEL 시스템 역할을 사용할 수 있습니다. Ansible 제어 노드에서 다음 프로세스를 수행합니다.
이 절차에서는 다음과 같은 네트워크 토폴로지를 가정합니다.
사전 요구 사항
- 제어 노드와 관리형 노드가 준비되었습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리형 노드에 연결하는 데 사용하는 계정에는
sudo
권한이 있습니다. -
관리 노드는
NetworkManager
및firewalld
서비스를 사용합니다. 구성하려는 관리형 노드에는 네 가지 네트워크 인터페이스가 있습니다.
-
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
네트워크 인터페이스에 할당합니다.
절차
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/playbook.yml
)을 생성합니다.--- - name: Configuring policy-based routing hosts: managed-node-01.example.com tasks: - name: Routing traffic from a specific subnet to a different default gateway ansible.builtin.include_role: name: rhel-system-roles.network vars: network_connections: - name: Provider-A interface_name: enp7s0 type: ethernet autoconnect: True ip: address: - 198.51.100.1/30 gateway4: 198.51.100.2 dns: - 198.51.100.200 state: up zone: external - name: Provider-B interface_name: enp1s0 type: ethernet autoconnect: True ip: address: - 192.0.2.1/30 route: - network: 0.0.0.0 prefix: 0 gateway: 192.0.2.2 table: 5000 state: up zone: external - name: Internal-Workstations interface_name: enp8s0 type: ethernet autoconnect: True ip: address: - 10.0.0.1/24 route: - network: 10.0.0.0 prefix: 24 table: 5000 routing_rule: - priority: 5 from: 10.0.0.0/24 table: 5000 state: up zone: trusted - name: Servers interface_name: enp9s0 type: ethernet autoconnect: True ip: address: - 203.0.113.1/24 state: up zone: trusted
플레이북 구문을 확인합니다.
$ ansible-playbook --syntax-check ~/playbook.yml
이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
플레이북을 실행합니다.
$ ansible-playbook ~/playbook.yml
검증
내부 워크스테이션 서브넷의 RHEL 호스트에서 다음을 수행합니다.
traceroute
패키지를 설치합니다.# yum install traceroute
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
을 통해 패킷을 전송함을 표시합니다.
서버 서브넷의 RHEL 호스트에서 다음을 수행합니다.
traceroute
패키지를 설치합니다.# yum install traceroute
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 시스템 역할을 사용하여 구성한 RHEL 라우터에서 다음을 수행합니다.
규칙 목록을 표시합니다.
# 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에는
로컬
테이블, 기본 및기본값
에 대한 규칙이 포함되어 있습니다.다음 표
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
인터페이스 및 방화벽 영역을 표시합니다.
# firewall-cmd --get-active-zones external interfaces: enp1s0 enp7s0 trusted interfaces: enp8s0 enp9s0
외부
영역에 masquerading이 활성화되었는지 확인합니다.# firewall-cmd --info-zone=external external (active) target: default icmp-block-inversion: no interfaces: enp1s0 enp7s0 sources: services: ssh ports: protocols: masquerade: yes ...
추가 리소스
-
/usr/share/ansible/roles/rhel-system-roles.network/README.md
file -
/usr/share/doc/rhel-system-roles/network/
디렉터리