차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
| multiple_gateway_설정 [2024/04/19 04:41] – [라우팅 테이블 등록] koov | multiple_gateway_설정 [2024/04/19 12:06] (현재) – [NetworkManager 사용시] koov | ||
|---|---|---|---|
| 줄 4: | 줄 4: | ||
| 두개의 NIC, 두개의 Default Gateway 설정방법 | 두개의 NIC, 두개의 Default Gateway 설정방법 | ||
| - | |||
| - | |||
| ===== 기본 환경 ===== | ===== 기본 환경 ===== | ||
| 줄 41: | 줄 39: | ||
| 동일한 환경에서 '' | 동일한 환경에서 '' | ||
| - | 이때 '' | + | 이때 |
| <WRAP prewrap> | <WRAP prewrap> | ||
| <code bash> | <code bash> | ||
| 줄 57: | 줄 55: | ||
| </ | </ | ||
| - | 확인된 바와 같이 '' | + | 확인된 바와 같이 '' |
| 이 상황을 해결하려면 아래처럼 '' | 이 상황을 해결하려면 아래처럼 '' | ||
| 줄 74: | 줄 72: | ||
| </ | </ | ||
| - | 이렇게 하면 '' | + | 이렇게 하면 '' |
| <WRAP prewrap> | <WRAP prewrap> | ||
| 줄 127: | 줄 125: | ||
| <code vim / | <code vim / | ||
| ### / | ### / | ||
| - | iif eth0 table 1 | + | iif eth0 priority 100 table 1 |
| - | from 192.168.0.117 table 1 | + | from 192.168.0.117 |
| </ | </ | ||
| </ | </ | ||
| 줄 140: | 줄 138: | ||
| <code vim / | <code vim / | ||
| ### / | ### / | ||
| - | iif eth1 table 1 | + | iif eth1 priority 100 table 1 |
| - | from 10.33.0.117 table 2 | + | from 10.33.0.117 |
| </ | </ | ||
| </ | </ | ||
| + | '' | ||
| + | 이렇게 설정하고 '' | ||
| + | <WRAP prewrap> | ||
| + | <code bash> | ||
| + | tcpdump: verbose output suppressed, use -v or -vv for full protocol decode | ||
| + | listening on eth1:, link-type EN10MB (Ethernet), capture size 262144 bytes | ||
| + | [Interface: | ||
| + | [Interface: | ||
| + | [Interface: | ||
| + | [Interface: | ||
| + | [Interface: | ||
| + | [Interface: | ||
| + | </ | ||
| + | </ | ||
| - | ===== 설정 정보 ===== | + | 위와같이 동일한 인터페이스 '' |
| + | ===== NetworkManager 사용시 ===== | ||
| + | 전통적인 '' | ||
| - | {{: | + | '' |
| - | 위 그림의 '' | + | 위와 |
| - | 두개의 서브넷을 가지며 두개 모두 독립적으로 작동중인 네트워크다. | + | |
| - | **디폴트 게이트웨이**는 | + | '' |
| - | 하지만 인커밍 리퀘스트가 발생하는 NIC별로 트래픽이 발생하게 된다. | + | <WRAP prewrap> |
| + | <code vim> | ||
| + | # | ||
| + | |||
| + | INTERFACE=$1 | ||
| + | ACTION=$2 | ||
| + | |||
| + | if [ " | ||
| + | if [ " | ||
| + | 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 [ " | ||
| + | if [ " | ||
| + | ip route add 10.33.0.0/ | ||
| + | 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 | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | 그리고 **해당파일에 반드시 실행권한(+x)을 부여**해줘야 한다. 각 스크립트는 | ||
| + | 참조링크 : https:// | ||
| + | |||
| + | 한방에 | ||
| + | <WRAP prewrap> | ||
| + | <code bash> | ||
| + | chmod +x, | ||
| + | </ | ||
| + | </ | ||
| ====== rp_filter ====== | ====== rp_filter ====== | ||
| - | 다중 게이트웨이 설정을 하기전에 일단 '' | ||
| '' | '' | ||
| 줄 192: | 줄 239: | ||
| * 커널 공식 문서에는 이 값이 기본적으로 '' | * 커널 공식 문서에는 이 값이 기본적으로 '' | ||
| - | * RHEL 6 이상은 기본적으로 [[http:// | + | * '' |
| - | * Strict mode(엄격한 필터링)는 __패킷이 시스템에 도착하면 커널이 패킷의 소스 IP를 가져와 라우팅 테이블을 조회하여 패킷이 도착한 인터페이스가 커널이 해당 IP에 패킷을 보내는 데 사용하는 것과 동일한 인터페이스인지 확인__합니다. 인터페이스가 동일하면 패킷이 엄격한 필터링 테스트를 통과하고 정상적으로 처리됩니다. **인터페이스가 동일하지 않으면 패킷은 추가 처리 없이 폐기**되고 RHEL 7+에서는 '' | + | * '' |
| * 엄격한 필터링의 주요 효과는 **지정된 원격 IP의 경우 시스템이 특정 인터페이스를 통해서만 통신한다**는 것입니다. 지정된 원격 IP 또는 네트워크에 응답하는 인터페이스를 제어하도록 정적 경로를 설정합니다. | * 엄격한 필터링의 주요 효과는 **지정된 원격 IP의 경우 시스템이 특정 인터페이스를 통해서만 통신한다**는 것입니다. 지정된 원격 IP 또는 네트워크에 응답하는 인터페이스를 제어하도록 정적 경로를 설정합니다. | ||
| - | * '' | + | * '' |
| <WRAP prewrap> | <WRAP prewrap> | ||
| 줄 213: | 줄 260: | ||
| * https:// | * https:// | ||
| - | ===== 단계1 ===== | ||
| - | |||
| - | ==== set up eth0 ==== | ||
| - | |||
| - | |||
| - | / | ||
| - | <WRAP prewrap> | ||
| - | <code bash> | ||
| - | # cat / | ||
| - | # echo "# dual nic-gateway below" >> / | ||
| - | # echo "10 eth0table" | ||
| - | # cat / | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | ==== 라우팅 테이블 추가 ==== | ||
| - | |||
| - | <WRAP prewrap> | ||
| - | <code bash> | ||
| - | # ip route add 192.168.0.0/ | ||
| - | # ip route add default via 192.168.0.1 dev eth0 table eth0table | ||
| - | |||
| - | |||
| - | # ip rule add from 192.168.0.100/ | ||
| - | # ip rule add to 192.168.0.100 table eth0table | ||
| - | |||
| - | # ip route flush cache | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | 재부팅 시에도 위 라우팅 테이블이 적용되도록 설정 | ||
| - | <WRAP prewrap> | ||
| - | <code vim> | ||
| - | # vi / | ||
| - | |||
| - | 192.168.0.0 dev eth0 src 192.168.0.100 table eth0table | ||
| - | default via 192.168.0.1 dev eth0 table eth0table | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | <WRAP prewrap> | ||
| - | <code vim> | ||
| - | # vi / | ||
| - | |||
| - | from 192.168.0.100/ | ||
| - | to 192.168.0.100 table eth0table | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | |||
| - | ===== 단계2 ===== | ||
| - | |||
| - | |||
| - | ==== set up eth1 ==== | ||
| - | |||
| - | / | ||
| - | <WRAP prewrap> | ||
| - | <code bash> | ||
| - | # cat / | ||
| - | # echo "# dual nic-gateway below" >> / | ||
| - | # echo "11 eth1table" | ||
| - | # cat / | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | |||
| - | ==== 라우팅 테이블 수정 ==== | ||
| - | <WRAP prewrap> | ||
| - | <code bash> | ||
| - | |||
| - | # ip route add 192.168.1.0/ | ||
| - | # ip route add default via 192.168.1.1 dev eth1 table eth1table | ||
| - | |||
| - | # ip rule add from 192.168.1.200/ | ||
| - | # ip rule add to 192.168.1.200 table eth1table | ||
| - | |||
| - | # ip route flush cache | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | |||
| - | 재부팅 시에도 위 라우팅 테이블이 적용되도록 설정 | ||
| - | <WRAP prewrap> | ||
| - | <code vim> | ||
| - | # vi / | ||
| - | |||
| - | 192.168.1.0 dev eth1 src 192.168.1.200 table eth1table | ||
| - | default via 192.168.1.1 dev eth1 table eth1table | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | <WRAP prewrap> | ||
| - | <code vim> | ||
| - | # vi / | ||
| - | |||
| - | from 192.168.1.200/ | ||
| - | to 192.168.1.200 table eth1table | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | |||
| - | 작업이 완료된 이후 network 재시작등을 수행해준다. | ||
| - | |||
| - | ===== 설정1 ===== | ||
| - | 이 방법은 나가는 네트워크는 기본게이트웨이 하나로만 나가게 되지만 들어오는 요청은 요청받은 NIC를 통해 응답하게 하는 방식이다. | ||
| - | |||
| - | 서버 네트워크 | ||
| - | A네트워크는 공인 네트워크 | ||
| - | IP 210.10.10.11/ | ||
| - | GW 210.10.10.1 | ||
| - | |||
| - | B네트워크는 사설 네트워크 | ||
| - | IP 10.1.10.11/ | ||
| - | GW 10.1.10.1 | ||
| - | |||
| - | <WRAP prewrap> | ||
| - | <code bash> | ||
| - | [root@server network-scripts]# | ||
| - | 210.10.10.0/ | ||
| - | default via 210.10.10.1 dev ens192 table ens192table | ||
| - | |||
| - | [root@server network-scripts]# | ||
| - | 10.1.10.0/ | ||
| - | default via 10.1.10.1 dev ens224 table ens224table | ||
| - | |||
| - | [root@server network-scripts]# | ||
| - | from 210.10.10.11/ | ||
| - | |||
| - | [root@server network-scripts]# | ||
| - | from 10.1.10.11/ | ||
| - | |||
| - | </ | ||
| - | </ | ||
| - | |||
| - | 라우팅 테이블 추가 | ||
| - | <WRAP prewrap> | ||
| - | <code vim / | ||
| - | # | ||
| - | # L4 network route | ||
| - | # | ||
| - | 10 ens192table | ||
| - | 11 ens224table | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | ===== 설정2 ===== | ||
| - | * eth0 | ||
| - | 네트워크A 192.168.0.0/ | ||
| - | IPADDRESS 192.168.0.10 | ||
| - | GATEWAY 192.168.0.1 | ||
| - | |||
| - | * eth1 | ||
| - | 네트워크B 10.0.0.0/24 | ||
| - | IPADDRESS 10.0.0.30 | ||
| - | GATEWAY 10.0.0.1 | ||
| - | |||
| - | <WRAP prewrap> | ||
| - | <code vim / | ||
| - | TYPE=Ethernet | ||
| - | BOOTPROTO=none | ||
| - | NAME=eth0 | ||
| - | DEVICE=eth0 | ||
| - | IPADDR=192.168.0.10 | ||
| - | NETMASK=255.255.255.0 | ||
| - | # | ||
| - | ONBOOT=yes | ||
| - | NM_CONTROLLED=no | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | <WRAP prewrap> | ||
| - | <code vim / | ||
| - | TYPE=Ethernet | ||
| - | BOOTPROTO=none | ||
| - | NAME=eth1 | ||
| - | DEVICE=eth1 | ||
| - | IPADDR=10.0.0.30 | ||
| - | NETMASK=255.255.255.0 | ||
| - | # | ||
| - | ONBOOT=yes | ||
| - | NM_CONTROLLED=no | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | 위에서 '' | ||
| - | |||
| - | <WRAP prewrap> | ||
| - | <code vim / | ||
| - | default nexthop via 192.168.0.1 weight 1 nexthop via 10.0.0.1 weight 1 | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | <WRAP prewrap> | ||
| - | <code vim / | ||
| - | default nexthop via 192.168.0.1 weight 1 nexthop via 10.0.0.1 weight 1 | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | 라우팅 테이블은 두 인터페이스 모두 동일하게 설정해준다. 또는 인터페이스별로 nexthop 순서를 바꿔도 상관은 없다. | ||
| - | |||
| - | <WRAP prewrap> | ||
| - | <code vim / | ||
| - | iif eth0 table 1 | ||
| - | from 192.168.0.10 table 1 | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | <WRAP prewrap> | ||
| - | <code vim / | ||
| - | iif eth1 table 2 | ||
| - | from 10.0.0.30 table 2 | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | 룰 설정은 들어온 인터페이스로 통신하기 위해서 해당 인터페이스 입력은 해당 아이피 라우팅 테이블을 이용하도록 설정해준다. | ||
| - | |||
| - | ip route 명령어를 통해 라우팅 테이블을 보면 아래와 비슷한 형태로 출력이 된다. | ||
| - | |||
| - | <WRAP prewrap> | ||
| - | <code bash> | ||
| - | [root@test ~]# ip r | ||
| - | default | ||
| - | nexthop via 192.168.0.1 dev eth0 weight 1 | ||
| - | nexthop via 10.0.0.1 dev eth1 weight 1 | ||
| - | 169.254.0.0/ | ||
| - | 169.254.0.0/ | ||
| - | 192.168.0.0/ | ||
| - | 10.0.0.0/24 dev eth1 proto kernel scope link src 10.0.0.30 | ||
| - | </ | ||
| - | </ | ||
| ===== 참조링크 ===== | ===== 참조링크 ===== | ||