차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
multiple_gateway_설정 [2024/04/19 04:36] – [두번째 NIC로 통신] 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> | ||
줄 98: | 줄 96: | ||
하지만 '' | 하지만 '' | ||
+ | 먼저 각각의 인터페이스에 대해 라우팅 테이블을 따로 생성한다. | ||
+ | |||
+ | '' | ||
''/ | ''/ | ||
<WRAP prewrap> | <WRAP prewrap> | ||
줄 107: | 줄 108: | ||
</ | </ | ||
+ | 마찬가지로 '' | ||
''/ | ''/ | ||
<WRAP prewrap> | <WRAP prewrap> | ||
줄 116: | 줄 118: | ||
</ | </ | ||
+ | '' | ||
+ | 또는 | ||
+ | '' | ||
''/ | ''/ | ||
<WRAP prewrap> | <WRAP prewrap> | ||
<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 |
</ | </ | ||
</ | </ | ||
+ | |||
+ | 마찬가지로 '' | ||
+ | 또는 | ||
+ | '' | ||
''/ | ''/ | ||
줄 129: | 줄 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 ====== | ||
- | 다중 게이트웨이 설정을 하기전에 일단 '' | ||
'' | '' | ||
줄 181: | 줄 239: | ||
* 커널 공식 문서에는 이 값이 기본적으로 '' | * 커널 공식 문서에는 이 값이 기본적으로 '' | ||
- | * RHEL 6 이상은 기본적으로 [[http:// | + | * '' |
- | * Strict mode(엄격한 필터링)는 __패킷이 시스템에 도착하면 커널이 패킷의 소스 IP를 가져와 라우팅 테이블을 조회하여 패킷이 도착한 인터페이스가 커널이 해당 IP에 패킷을 보내는 데 사용하는 것과 동일한 인터페이스인지 확인__합니다. 인터페이스가 동일하면 패킷이 엄격한 필터링 테스트를 통과하고 정상적으로 처리됩니다. **인터페이스가 동일하지 않으면 패킷은 추가 처리 없이 폐기**되고 RHEL 7+에서는 '' | + | * '' |
* 엄격한 필터링의 주요 효과는 **지정된 원격 IP의 경우 시스템이 특정 인터페이스를 통해서만 통신한다**는 것입니다. 지정된 원격 IP 또는 네트워크에 응답하는 인터페이스를 제어하도록 정적 경로를 설정합니다. | * 엄격한 필터링의 주요 효과는 **지정된 원격 IP의 경우 시스템이 특정 인터페이스를 통해서만 통신한다**는 것입니다. 지정된 원격 IP 또는 네트워크에 응답하는 인터페이스를 제어하도록 정적 경로를 설정합니다. | ||
- | * '' | + | * '' |
<WRAP prewrap> | <WRAP prewrap> | ||
줄 202: | 줄 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 | ||
- | </ | ||
- | </ | ||
===== 참조링크 ===== | ===== 참조링크 ===== |