우리는 AT & T U-Verse 인터넷 서비스를 보유하고 있으며,이 서비스에는 매우 중요한 DSL 게이트웨이가 있습니다.
5 개의 IP (넷 마스크 248)가 있지만 게이트웨이는 단일 IP-> 단일 MAC 주소 매핑 이외의 다른 작업을 수행 할 수 없습니다.
우리는 단일 방화벽 시스템을 가지고 있으며 다른 IP / 포트 콤보를 DMZ 내부의 다른 위치로 리디렉션합니다.
지금까지의 솔루션은 방화벽에 4 개의 추가 NIC가있는 VMWare 가상 머신을 설치하여 다른 4 개의 IP 주소를 얻는 것입니다. 그러나 문제가 있습니다.
게이트웨이는 기본적으로 IP가 예상되는 MAC에서 응답하는지 확인하기 위해 ARP 핑을 수행합니다. 4 개의 NIC가 모두 동일한 LAN에 있으면 Linux는 단일 인터페이스를 사용하여 모든 IP에 대한 ARP 요청에 응답합니다. 그것은 게이트웨이가 기대하는 것이 아니며 3 개의 다른 NIC를 망칩니다. 게이트웨이는 ARP 핑 결과가 예상되는 MAC이 아닌 IP의 수신 트래픽 라우팅을 거부합니다.
eth0의 IP가 eth0으로 나가고 eth1의 IP가 eth1로 나가는 등의 ARP 응답을 얻으려면 어떻게해야합니까?
편집하다
이 상황에서는 Christopher Cashell의 답변이 효과가 없습니다. 나는 그것을 읽고 큰 희망을 가지고 있었지만 … 아니.
편집 2
해결되었습니다! 아래 답변을 참조하십시오.
답변
선택한 솔루션이 작동하지만 arptable을 포함하지 않는 대안이 있습니다. (크리스토퍼 카쉘은 원래 올바른 길을 가고 있었지만, 그는 혼란에 빠졌다.)
간단히 말해서 다음과 같은 매개 변수를 설정하려고합니다.
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
최신 2.6 시리즈 Linux 커널을 실행할 때 사용할 수 있어야합니다. 시스템에 ‘/ proc / sys / net / ipv4 / conf / / arp_announce’및 / proc / sys / net / ipv4 / conf / / arp_ignore ‘가 있는지 확인하고 확인하십시오 .
‘arp_filter’매개 변수는 다양한 IP 주소가 LAN 세그먼트를 공유하지만 다른 IP 서브넷을 사용하는 경우에만 작동합니다. IP 서브넷도 공유하는 경우 위와 같이 ‘arp_ignore’및 ‘arp_announce’를 사용해야합니다.
( ‘arp_filter’도 ‘0’으로 다시 설정해야 할 수도 있습니다.)
답변
좋아요, 여기 해결책이 있습니다. 먼저 요약하자면 다음과 같습니다.
기본 네트워크 계획은 다음과 같습니다.
eth0 10.10.10.2 netmask 255.255.255.248
eth1 10.10.10.3 netmask 255.255.255.248
eth2 10.10.10.4 netmask 255.255.255.248
eth3 10.10.10.5 netmask 255.255.255.248
모든 인터페이스가 겹칩니다. 이것은 기술적으로 잘못된 것이며 모든 재난의 원천은 …하지만이 멍청한 주거용 게이트웨이 때문에해야합니다.
첫째, 브로드 캐스트 ARP 요청은이 모든 것으로 이동합니다. 4 개의 IP가 모두 유효한 로컬 주소이므로 4 개의 모든 인터페이스가 응답하려고합니다.
1) arptables를 설치하십시오 . 부팅하는 동안이 위치를 추가 하십시오 ( /etc/rc.local )
arptables -F INPUT
arptables -A INPUT -i eth0 --destination-ip ! 10.10.10.2 -j DROP
arptables -A INPUT -i eth1 --destination-ip ! 10.10.10.3 -j DROP
arptables -A INPUT -i eth2 --destination-ip ! 10.10.10.4 -j DROP
arptables -A INPUT -i eth3 --destination-ip ! 10.10.10.5 -j DROP
이렇게하면 브로드 캐스트가 잘못된 인터페이스로 들어 가지 않습니다. 따라서 올바른 인터페이스가 유일한 응답자입니다.
그 자체로는 충분하지 않습니다. 다음 비트는 ARP 테이블 문제입니다. 요청하는 PC에는 이미 ARP 테이블 항목이있을 수 있으므로 Linux는 이와 관련된 인터페이스를 사용합니다. 해당 ARP 테이블 항목이 만료 될 때까지 ARP 요청과 관련된 항목이 아닌 해당 항목의 인터페이스를 사용하여 ARP 응답을 보내려고합니다.
sysctl 옵션 rp_filter 는 잘못된 인터페이스에있는 경우 발신 ARP 응답 패킷을 거부하는 것으로 보입니다. 그래서…
2) rp_filter를 비활성화 하십시오 .
데비안 / 우분투에서 이것은 /etc/sysctl.d/10-network-security.conf에 있는 두 개의 rp_filter 라인을 주석 처리한다는 의미 입니다.
이 옵션은 인터페이스 간 스푸핑 공격을 방지하기 위해 사용되었습니다. MAC과 IP를 교환하고 여전히 동일한 인터페이스를 통해 라우팅되는지 확인하여 패킷이 들어오고 나가는 인터페이스에 패킷이 적합한 지 확인합니다. 따라서 일반적으로 끄는 것이 좋지 않습니다. 필자의 경우 모든 인터페이스가 동일한 네트워크에 있으므로 검사가 실제로 중요하지 않습니다.
다른 인터페이스를 추가하고 스푸핑 보호가 필요한 경우 arptables / iptables 항목을 만들어 같은 작업을 수행 할 수 있습니다.
답변
이것은 Linux가 IP 및 NIC를 처리하는 방식과 관련이 있습니다. 기본적으로 IP 주소는 특정 NIC뿐만 아니라 상자에 속하는 것처럼 취급합니다. 결과적으로 예상치 못한 인터페이스의 IP 주소에서 ARP 응답을 얻을 수 있습니다.
해결책은 sysctl 옵션입니다. 내가 기억하는 것처럼, 당신이 찾고있는 것은 :
net.ipv4.conf.default.arp_filter=1
net.ipv4.conf.all.arp_filter=1
문제가 해결됩니다. 이들을 /etc/sysctl.conf에 추가하고 ‘ sysctl -p
‘를 실행하십시오 (또는 각 행을 ‘ sysctl -w
‘ 의 인수로 실행하십시오 .
이로 인해 Linux는 IP 주소가 실제로 할당 된 인터페이스의 ARP 요청에만 응답합니다.
답변
다음과 함께 허용되는 답변 : http://www.linuxquestions.org/questions/linux-networking-3/multiple-interfaces-all-traffic-flows-through-just-one-538701/
고정 경로를 사용하여 특정 인터페이스를 통해 원하는 IP 와만 통신하는 경우 비슷한 문제에 대한 강력하고 간단한 솔루션을 만들었습니다.
답변
게이트웨이를 브리지하고 방화벽이 IP를 처리하도록 할 수 있습니까?