비대칭 라우팅 문제로 인해 미칠 지경입니다!
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 없이 수행될 수 있습니다.