Linux의 여러 NIC: 설정된 경로를 통해 경로를 반환하는 방법은 무엇입니까?

Linux의 여러 NIC: 설정된 경로를 통해 경로를 반환하는 방법은 무엇입니까?

두 개의 서로 다른 네트워크(기본 네트워크와 대역 외 관리 네트워크, "기본" 및 "mgmt"라고 함)에 두 개의 인터페이스가 있는 Linux 호스트가 있는 경우 반환 트래픽을 어떻게 동일한 인터페이스를 통해 다시 라우팅할 수 있습니까? 그게 어디서 왔어?

즉, 내가 앉아 있는 곳에서 라우터를 통해 머신의 기본 인터페이스 또는 관리 인터페이스에 액세스합니다. 기본 인터페이스로 SSH를 통해 연결하면 문제가 없습니다. mgmt 인터페이스에 ssh를 사용하면 내 패킷이 서버에 도착하지만 서버는 기본 인터페이스에 있는 기본 게이트웨이를 통해 응답을 다시 보냅니다. 따라서 연결이 설정되지 않았습니다. mgmt 네트워크에서 수신된 인바운드 요청에 대해 서버가 mgmt 네트워크를 통해 응답하도록 하려면 어떻게 해야 합니까?

답변1

나는 대부분의 답변을 여기에서 찾았습니다.https://unix.stackexchange.com/questions/4420/reply-on-same-interface-as-incoming

자세한 내용은 여기를 참조하세요:http://linux-ip.net/html/routing-tables.html

또한 필요한 부분이 대부분 포함된 답변을 제공한 Tom Yan에게 감사드립니다. 하지만 다른 답변 중 어느 것도 실제로 완전하거나, 완전히 정확하거나, 따르기 쉽지 않기 때문에 이 답변을 게시합니다.

/etc/sysconfig/network-scripts/rule-*다음 프로세스는 Centos 7에서 작동합니다. NetworkManager가 및 를 읽지 못하기 때문에 NetworkManager와 함께 작동하도록 할 수 없었고 이러한 변경 사항을 지속적으로 유지하는 route-*동등한 명령을 찾을 수 없었습니다 . nmcli그런 명령을 가지고 있는 사람이 있다면 공유해 주세요. 따라서 첫 번째 필수 단계는 NetworkManager를 비활성화하는 것입니다.

systemctl disable NetworkManager
systemctl enable network
systemctl stop NetworkManager
systemctl start network

Linux 커널 2.2 및 2.4는 각각 0부터 255까지 번호가 지정된 여러 라우팅 테이블을 지원합니다. 일반적으로 사용되는 두 개의 라우팅 테이블은 local(라우팅 테이블 255) 및 main(라우팅 테이블 254)입니다. 이러한 내용은 에 나열되어 있습니다 /etc/iproute2/rt_tables. 사용되지 않은 번호( 참조 /etc/iproute2/rt_tables)를 선택하고 에 추가하여 새 라우팅 테이블을 생성할 수 있습니다 /etc/iproute2/rt_tables.

제 경우에는 "기본" 인터페이스는 eth0게이트웨이 192.168.20.1이 있는 192.168.20.20이고, "mgmt" 인터페이스는 eth1게이트웨이 192.168.5.1이 있는 192.168.5.5입니다.

새 라우팅 테이블 번호 200과 새 라우팅 테이블 이름을 선택합니다 mgmt.

echo "200 mgmt" >> /etc/iproute2/rt_tables

다음으로, 관리 인터페이스에서 수신된 트래픽에 대해 새 라우팅 테이블을 사용하기 위한 규칙을 생성해야 합니다. 인터넷의 다른 리소스에서는 이 작업을 하나의 인터페이스에만 수행해야 한다고 말하지만 실제로는 두 인터페이스 모두에서 수행해야 합니다. 그 이유는 다음과 같습니다. 인터페이스를 하나만 불러올 경우 해당 인터페이스는 ping에 응답할 수 있습니다. 하지만 두 인터페이스를 모두 불러오면 먼저 가져온 인터페이스는 ping에 응답하고 두 번째 인터페이스는 응답하지 않습니다. 즉, mgmt인터페이스를 먼저 불러온 다음 기본 인터페이스를 불러오면 기본 인터페이스가 응답하지 않습니다. 따라서 두 인터페이스 모두에 규칙을 정의하는 것이 좋습니다.

이 작업은 다음과 같이 일회성(비영구적)으로 수행할 수 있습니다.

ip rule add from 192.168.20.20 table main
ip route add default via 192.168.20.1 dev eth0 table main

ip rule add from 192.168.5.5 table mgmt
ip route add default via 192.168.5.1 dev eth1 table mgmt

이 시점에서는 두 인터페이스가 모두 응답해야 합니다. 이제 지속성을 유지하기 위해 을 읽으면 /etc/sysconfig/network-scripts/ifup-routes모든 rule-*route-*파일을 구문 분석하고 각 행을 인수로 전달 ip rule add합니다 ip route add. 따라서 다음과 같이 4개의 새 파일을 만듭니다.

echo "from 192.168.20.20 table main" > /etc/sysconfig/network-scripts/rule-eth0
echo "default via 192.168.20.1 dev eth0 table main" > /etc/sysconfig/network-scripts/route-eth0

echo "from 192.168.5.5 table mgmt" > /etc/sysconfig/network-scripts/rule-eth1
echo "default via 192.168.5.1 dev eth1 table mgmt" > /etc/sysconfig/network-scripts/route-eth1

재부팅 후에는 기본적으로 두 인터페이스가 모두 작동하는 것을 확인해야 합니다.

답변2

소스 기반 라우팅 / ip rule.

primaryhas 1.2.3.4mgmthas 2.3.4.5(그리고 기본 게이트웨이는 각각 1.2.3.1및 ) 라고 가정합니다 2.3.4.1.

ip rule add from 1.2.3.4 table 234
ip route add default via 1.2.3.1 dev primary table 234

(위 항목은 선택사항이어야 합니다)

ip rule add from 2.3.4.5 table 345
ip route add default via 2.3.4.1 dev mgmt table 345

관련 정보