
비대칭 라우팅 문제로 인해 미칠 지경입니다!
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에서 모든 대상으로의 모든 사용자 트래픽을 허용합니다.
- 10.xxx로 향하는 트래픽에 대해 eth1을 통해 패킷을 라우팅합니다.
- 다른 대상에 대해 eth2를 통해 패킷을 라우팅합니다(기본 경로).
- eth0을 통해 들어오는 패킷을 라우팅하지 않습니다.
eth2: WAN을 오가는 사용자 트래픽
- 주소: 10.99.74.85
- eth1의 모든 사용자 트래픽을 수락하고 10.xxx에 없는 대상에 대해 eth2로 패킷을 보냅니다.
- eth2에서 응답 패킷을 수락하고 10.xxx로 향하는 모든 트래픽에 대해 eth1을 통해 라우팅합니다.
- eth0을 통해 들어오는 패킷을 라우팅하지 않습니다.
rt_tables에 'mgmt'라는 iproute2 테이블을 생성하고 이 인터페이스를 격리하기 위해 우선순위가 높은 정책 기반 라우팅 규칙을 추가했지만, 무엇을 시도하더라도 기본 라우팅 테이블은 여전히 eth0이 기본 경로로 호출되는 것 같습니다. . 문제는 다음과 같습니다.
- eth1에서 들어오는 패킷은 eth0을 통해 라우팅됩니다. (나는 이것을 원하지 않습니다!)
- 10.xxx로 향하는 eth2로부터 들어오는 패킷은 eth0을 통해 라우팅됩니다(이건 원하지 않습니다!)
- main에서 기본 eth0 경로를 삭제하면 mgmt 테이블의 경로가 있어도 eth0 기능이 완전히 손실되지만 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 없이 대신 정책 라우팅을 사용하여 수행할 수 있습니다.