Ubuntu Linux-다중 NIC, 동일한 LAN… ARP 응답은 항상 단일 NIC를 사용합니다


16

우리는 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

해결되었습니다! 아래 답변을 참조하십시오.


추신- '우주 드롭'코멘트가 없습니다 ... U-Verse는 18mbps입니다. 다른 모든 3mbps 또는 케이블을 통한 매우 신뢰할 수없는 10mbps입니다.
darron

@dblack : 당신은 당신의 대답 :) 추가하는 것을 잊었다
미하이 Limbăşan을

api.recaptcha.net 사이트가 잠시 다운되었습니다. 대답은 이제 끝났습니다.
darron 2018 년

답변:


13

선택한 솔루션이 작동하지만 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'으로 다시 설정해야 할 수도 있습니다.)


arp_filter는 어떻게 되었습니까? ARP 문제에 대한 초기 (2003?) 해결책 이었지만 적어도 Centos 5에서는 설명대로 작동하지 않는 것 같습니다. arp_ignore 및 arp_announce는 좋은 것 같습니다.
pcapademic

이 솔루션은있는 그대로 ARP 수준에서만 작동하는 것으로 보입니다. 추가 경로 설정이 없으면 방화벽은 여전히 ​​자체 발신 IP 트래픽에 대해 잘못된 발신 카드 (및 MAC)를 선택할 수 있지만 항상 올바른 카드에서 들어오는 IP 트래픽을 수신하므로 비대칭 경로 및 rp_filter 고려 사항이 발생합니다.
AB

8

좋아요, 여기 해결책이 있습니다. 먼저 요약하자면 다음과 같습니다.

기본 네트워크 계획은 다음과 같습니다.

 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 항목을 만들어 같은 작업을 수행 할 수 있습니다.


5

이것은 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 요청에만 응답합니다.


흠 ... 불행히도 작동하지 않는 것 같습니다. 나는 그것을 sysctl.conf에 붙여 넣고 sysctl을 실행하고 심지어 재부팅하고 변경하지 않았습니다. / proc의 옵션을 분류하여 설정 한 것을 볼 수 있지만 다른 상자에서 arping하면 모든 응답이 동일한 MAC에서 나옵니다. 인터페이스는 모두 동일한 네트워크에 있습니다 (동일한 브로드 캐스트 등).
darron

1
인터페이스가 동일한 네트워크에 있지만 다른 서브넷에 주소가있는 경우 올바른 솔루션입니다. 작동 확인.
Alastair Irvine


0

게이트웨이를 브리지하고 방화벽이 IP를 처리하도록 할 수 있습니까?


내가 이해하는 한, 아니요 ...하지만 내가 틀렸다면 누군가 나를 수정하십시오.
darron
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.