차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
multiple_gateway_설정 [2024/04/19 05:39] koovmultiple_gateway_설정 [2024/04/19 12:06] (현재) – [NetworkManager 사용시] koov
줄 4: 줄 4:
  
 두개의 NIC, 두개의 Default Gateway 설정방법 두개의 NIC, 두개의 Default Gateway 설정방법
- 
- 
  
 ===== 기본 환경 ===== ===== 기본 환경 =====
줄 41: 줄 39:
 동일한 환경에서 ''SERVER-A''의 두번째 NIC인 ''eth1''의 ''10.33.0.117''로 핑을 시도하면 핑이 되지 않는것을 확인할 수 있다. 동일한 환경에서 ''SERVER-A''의 두번째 NIC인 ''eth1''의 ''10.33.0.117''로 핑을 시도하면 핑이 되지 않는것을 확인할 수 있다.
  
-이때 ''tcpdump''를 살펴보면 아래와 같다.+이때 ''SERVER-A''에서 ''tcpdump''를 살펴보면 아래와 같다.
 <WRAP prewrap> <WRAP prewrap>
 <code bash> <code bash>
줄 57: 줄 55:
 </WRAP> </WRAP>
  
-확인된 바와 같이 ''PING'' 패킷이 ''eth1''으로 들어오지만 나가는것은 없다. 이것은 SERVER-A의 OS에서 응답자체를 안한다는 것인데 왜 그런가 하면 위의 그림에 설명된 바와 같이 요즘 OS(RHEL 7 이상)는 기본적으로 ''rp_filter''가 ''RFC3704''에 정의된 대로 ''Strict mode (=1)''로 설정되어있기 때문이다. ''rp_filter''에 대한 설명은 [[rp_filter|아래]]를 참고한다.+확인된 바와 같이 ''PING'' 패킷이 ''eth1''으로 들어오지만 나가는것은 없다. 이것은 SERVER-A의 OS에서 응답자체를 안한다는 것인데 왜 그런가 하면 위의 그림에 설명된 바와 같이 요즘 OS(RHEL 7 이상)는 기본적으로 ''rp_filter''가 ''RFC3704''에 정의된 대로 ''Strict mode (=1)''로 설정되어있기 때문이다. ''rp_filter''에 대한 설명은 [[#rp_filter|아래]]를 참고한다.
  
 이 상황을 해결하려면 아래처럼 ''rp_filter''값을 설정하면 된다. 이 상황을 해결하려면 아래처럼 ''rp_filter''값을 설정하면 된다.
줄 74: 줄 72:
 </WRAP> </WRAP>
  
-이렇게 하면 ''PING''통신이 동작하는데 SERVER-A에서 ''tcpdump''로 패킷을 확인해보면+이렇게 하면 ''PING''통신이 동작하는데 ''SERVER-A''에서 ''tcpdump''로 패킷을 확인해보면
  
 <WRAP prewrap> <WRAP prewrap>
줄 161: 줄 159:
  
 위와같이 동일한 인터페이스 ''eth1''으로 응답하는것을 확인할 수 있다. 위와같이 동일한 인터페이스 ''eth1''으로 응답하는것을 확인할 수 있다.
 +
 +===== NetworkManager 사용시 =====
 +전통적인 ''ifconfig'' 파일이 아닌 ''NetworkManager''를 사용하는경우는 설정 방법이 다르다. 기존의 ''ifcfg-eth0''파일이나 ''route-eth0'', ''rule-eth0''과 같은 파일을 사용할 수 없다.
 +
 +''NetworkManager''는 자체적으로 별도의 라우팅테이블을 지정하는 기능이 없으므로 ''dispatcher script''를 이용하여야 한다.
 +
 +위와 동일한 구성을 하려면 아래 파일을 생성하면 된다.
 +
 +''/etc/NetworkManager/dispatcher.d/10-multiple-gw''
 +<WRAP prewrap>
 +<code vim>
 +#!/bin/bash
 +
 +INTERFACE=$1
 +ACTION=$2
 +
 +if [ "$INTERFACE" == "eth0" ]; then
 +    if [ "$ACTION" == "up" ]; then
 +        ip route add 192.168.0.0/24 dev eth0 table 1
 +        ip route add default via 192.168.0.1 dev eth0 table 1
 + ip rule add iif eth0 priority 100 table 1
 + ip rule add from 192.168.0.117 priority 100 table 1
 +    fi
 +fi
 +
 +if [ "$INTERFACE" == "eth1" ]; then
 +    if [ "$ACTION" == "up" ]; then
 + ip route add 10.33.0.0/24 dev eth1 table 2
 + ip route add default via 10.33.0.1 dev eth1 table 2
 + ip rule add iif eth1 priority 100 table 2
 +        ip rule add from 10.33.0.117 priority 100 table 2
 +    fi
 +fi
 +</code>
 +</WRAP>
 +
 +그리고 **해당파일에 반드시 실행권한(+x)을 부여**해줘야 한다. 각 스크립트는 ''root''가 소유한 **일반 실행 파일**이어야 합니다. 또한 그룹이나 다른 사람이 쓸 수 없어야 하며 ''setuid''가 아니어야 합니다.
 +참조링크 : https://networkmanager.dev/docs/api/latest/NetworkManager-dispatcher.html
 +
 +한방에 하려면 아래 ''chmod''명령어 참고
 +<WRAP prewrap>
 +<code bash>
 +chmod +x,g-w,o-w,-s,-t /etc/NetworkManager/dispatcher.d/10-multiple-gw
 +</code>
 +</WRAP>
  
  
줄 196: 줄 239:
   * 커널 공식 문서에는 이 값이 기본적으로 ''0''으로 설정되어 있다고 하지만 리눅스 배포판마다 기본값을 다르게 설정하고 있습니다.   * 커널 공식 문서에는 이 값이 기본적으로 ''0''으로 설정되어 있다고 하지만 리눅스 배포판마다 기본값을 다르게 설정하고 있습니다.
  
-  * RHEL 6 이상은 기본적으로 [[http://tools.ietf.org/html/rfc3704]]에 권장되는 엄격한 역방향 전달 필터링을 적용하도록 구성됩니다. 기본값 ''1''+  * ''RHEL 6'' 이상은 기본적으로 [[http://tools.ietf.org/html/rfc3704]]에 권장되는 엄격한 역방향 전달 필터링을 적용하도록 구성됩니다. 기본값 ''1''
  
-  * Strict mode(엄격한 필터링)는 __패킷이 시스템에 도착하면 커널이 패킷의 소스 IP를 가져와 라우팅 테이블을 조회하여 패킷이 도착한 인터페이스가 커널이 해당 IP에 패킷을 보내는 데 사용하는 것과 동일한 인터페이스인지 확인__합니다. 인터페이스가 동일하면 패킷이 엄격한 필터링 테스트를 통과하고 정상적으로 처리됩니다. **인터페이스가 동일하지 않으면 패킷은 추가 처리 없이 폐기**되고 RHEL 7+에서는 ''IPReversePathFilter''카운터가 증가됩니다.+  * ''Strict mode(엄격한 필터링)''는 __패킷이 시스템에 도착하면 커널이 패킷의 소스 IP를 가져와 라우팅 테이블을 조회하여 패킷이 도착한 인터페이스가 커널이 해당 IP에 패킷을 보내는 데 사용하는 것과 동일한 인터페이스인지 확인__합니다. 인터페이스가 동일하면 패킷이 ''엄격한 필터링 테스트''를 통과하고 정상적으로 처리됩니다. **인터페이스가 동일하지 않으면 패킷은 추가 처리 없이 폐기**되고 ''RHEL 7+''에서는 ''IPReversePathFilter''카운터가 증가됩니다.
  
   * 엄격한 필터링의 주요 효과는 **지정된 원격 IP의 경우 시스템이 특정 인터페이스를 통해서만 통신한다**는 것입니다. 지정된 원격 IP 또는 네트워크에 응답하는 인터페이스를 제어하도록 정적 경로를 설정합니다.   * 엄격한 필터링의 주요 효과는 **지정된 원격 IP의 경우 시스템이 특정 인터페이스를 통해서만 통신한다**는 것입니다. 지정된 원격 IP 또는 네트워크에 응답하는 인터페이스를 제어하도록 정적 경로를 설정합니다.
  
-  * ''RHEL 5'' 이전버전에서 커널은 엄격한 필터링을 지원하지 않았습니다. 따라서 이러한 이전 릴리스에서 매개 변수에는 0(비활성화) 및 1(느슨한) 두 가지 가능한 값만 있습니다. 기본값은 1(느슨한)입니다.+  * ''RHEL 5'' 이전버전에서 커널은 엄격한 필터링을 지원하지 않았습니다. 따라서 이러한 이전 릴리스에서 매개 변수에는 ''0(비활성화)'' 및 ''1(느슨한)'' 두 가지 가능한 값만 있습니다. 기본값은 ''1(느슨한)''입니다.
  
 <WRAP prewrap> <WRAP prewrap>
  • multiple_gateway_설정.1713505193.txt.gz
  • 마지막으로 수정됨: 2024/04/19 05:39
  • 저자 koov