LINUX의 비대칭 라우팅 문제

LINUX의 비대칭 라우팅 문제

비대칭 라우팅 문제로 인해 미칠 지경입니다!

3개의 NIC로 멀티홈 서버를 구축하려고 합니다. 각 NIC는 3개의 서로 다른 서브넷에 연결됩니다.

eth0: LAN 연결, 10.99.72.38; 기능: 관리 트래픽
eth1: LAN 연결, 10.99.70.150; 기능: 사용자 트래픽
eth2: WAN 연결, 10.99.74.85;

Amazon Linux 이미지(Linux 3.14.20-20.44.amzn1.x86_64 x86_64)를 사용하고 있지만 필요한 경우 CentOS로 전환할 수 있습니다.

내가 달성하려는 것 :

eth0: 관리 트래픽

  • 주소: 10.99.72.38
  • 나는 이것이 10.0.0.0/8의 주소만 받아들이고 응답하는 "격리된" 인터페이스가 되기를 원합니다.
  • 이것을 "로컬 LAN 전용 ssh" NIC로 생각하십시오.
  • eth0을 통해서만 응답할 수 있습니다.
  • 다른 모든 대상은 차단됩니다. 즉, 이 인터페이스를 통해 다른 대상에 연결할 수 없습니다.
  • eth0에 도착하는 트래픽은 eth1 또는 eth2를 사용하여 응답하지 않습니다.

eth1: LAN 안팎으로의 사용자 트래픽

  • 주소: 10.99.70.150
  • LAN에서 모든 대상으로의 모든 사용자 트래픽 허용
  • eth1을 통해 10.xxx로 향하는 트래픽으로 패킷 라우팅
  • eth2(기본 경로)를 통해 다른 대상으로 패킷 라우팅
  • 들어오는 패킷은 eth0을 통해 라우팅되지 않습니다.

eth2: WAN을 오가는 사용자 트래픽

  • 주소: 10.99.74.85
  • eth1의 모든 사용자 트래픽을 수락하고 eth2의 패킷을 10.xxx가 아닌 다른 대상으로 보냅니다.
  • eth2에서 응답 패킷을 수락하고 eth1을 통해 10.xxx로 향하는 모든 트래픽을 라우팅합니다.
  • 들어오는 패킷은 eth0을 통해 라우팅되지 않습니다.

rt_tables에 "mgmt"라는 iproute2 테이블을 생성하고 이 인터페이스를 격리하려고 정책 기반의 높은 우선순위 라우팅 규칙을 추가했지만, 아무리 시도해도 기본 라우팅 테이블은 여전히 ​​기본 라우팅인 eth0으로 불리는 것 같습니다. . 질문은 다음과 같습니다:

  • eth1에서 들어오는 패킷은 eth0을 통해 라우팅됩니다. (나는 이것을 원하지 않습니다!)
  • eth2에서 10.xxx로 들어오는 패킷은 eth0을 통해 라우팅됩니다. (나는 이것을 원하지 않습니다!)
  • 기본 eth0 경로를 기본에서 제거하면 eth0 기능이 완전히 손실됩니다. 경로가 mgmt 테이블에 존재하더라도 eth1은 올바르게 응답합니다.

수정되지 않은 라우팅 테이블(route -n)을 처음부터 시작합니다.

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface  
0.0.0.0         10.99.72.1      0.0.0.0         UG    0      0        0 eth0  
0.0.0.0         10.99.70.1      0.0.0.0         UG    10001  0        0 eth1  
0.0.0.0         10.99.74.1      0.0.0.0         UG    10002  0        0 eth2  
10.99.70.0      0.0.0.0         255.255.255.0   U     0      0        0 eth1  
10.99.72.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0  
10.99.74.0      0.0.0.0         255.255.255.0   U     0      0        0 eth2  

수정되지 않은 IP 규칙은 다음과 같습니다.

0:      from all lookup local  
32766:  from all lookup main  
32767:  from all lookup default  

특정 라우팅 규칙, 테이블 및 경로를 올바르게 가져오고 최종 라우팅 테이블과 규칙을 표시하는 데 도움을 주시면 대단히 감사하겠습니다!

답변1

eth0및 에 대한 기본 게이트웨이 설정을 제거해야 합니다 eth1. 이것이 수행되는 방법은 배포판에 따라 다릅니다.

아마도 정책 라우팅이 필요하지 않을 것입니다. 나는 당신이 원하는 것이 Netfilter / 를 사용하여 가장 잘 달성된다고 생각합니다 iptables.

iptables -I INPUT 1 -i eth0 ! -s 10.99.72.0/24 -j DROP
iptables -I FORWARD 1 -i eth0 -j DROP
iptables -I FORWARD 2 -o eth0 -j DROP

iptables -I INPUT 2 -i eth1 ! -s 10.0.0.0/8 -j DROP
iptables -I FORWARD 3 -i eth1 -j ACCEPT

iptables -I INPUT 3 -i eth2 -m conntrack --ctstate NEW -j DROP
iptables -I FORWARD 4 -i eth2 -j ACCEPT

이는 정책 라우팅을 통해 Netfilter 없이 수행될 수 있습니다.

관련 정보