Linux는 프록시 arp를 제공하지 않지만 문서에서는 제공한다고 나와 있습니다.

Linux는 프록시 arp를 제공하지 않지만 문서에서는 제공한다고 나와 있습니다.

저는 PDP-10 에뮬레이터를 개발 중입니다(참조:https://github.com/Rhialto/klh10). 여기에 설치된 운영 체제는 IPv4를 통해 외부 세계와 통신하려고 할 수 있습니다(이러한 시스템이 대중화되었을 때 IPv4가 이제 막 사용되기 시작했습니다). 이를 위해 에뮬레이터는 호스트에서 패킷 필터(또는 탭 장치)를 켭니다.

로컬 네트워크 10.0.0.x에 있다고 가정합니다. 에뮬레이트된 운영 체제는 10.0.0.51과 같은 IPv4 주소를 사용할 수 있습니다.

동일한 네트워크의 다른 호스트가 가상 호스트와 통신하기 위해 10.0.0.51에 대한 ARP 요청을 보냅니다. 나는 Unix 커널이 합리적인 이더넷 주소(프록시 ARP라고 함)를 사용하여 이러한 요청에 응답하기를 원합니다.

Unix가 이를 수행하도록 하기 위해 에뮬레이터는 호스트 운영 체제의 이더넷 주소를 사용하여 "arp -s 10.0.0.51 01:23:45:56:78:9A pub"를 ​​수행합니다(동일).

Linux가 아닌 다른 Unixen에서는 원하는 효과가 나타납니다. 10.0.0.51에 텔넷 또는 핑을 시도하면 시뮬레이션된 호스트가 ARP 요청을 하고 응답을 반환하는 것을 볼 수 있습니다.

23:13:42.391941 ARP, Request who-has 10.0.0.51 tell 10.0.0.16, length 46
23:13:42.391954 ARP, Reply 10.0.0.51 is-at f6:2b:a4:a0:76:b0 (oui Unknown), length 28

그러나 Linux(Ubuntu 15.10이 있음)에서는 이것이 작동하지 않습니다. 항목은 비록 이상한 방식이지만 ARP 테이블에 "arp -a"로 나타납니다.

? (10.0.0.51) at <from_interface> PERM PUB on eth0

나는 프록시 ARPing을 시도하고 활성화하기 위해 겉보기에 관련이 있는 것처럼 보이는 sysctls를 시도했습니다.

net.ipv4.conf.all.proxy_arp = 1
net.ipv4.conf.default.proxy_arp = 1
net.ipv4.conf.eth0.proxy_arp = 1

그리고 심지어

net.ipv4.ip_forward = 1

하지만 이 중 어느 것도 도움이 되지 않습니다. 내가 무엇을 놓치고 있나요?

Linux 시스템에서는 arp 명령만 사용하고, 관찰을 위해서는 tcpdump를 사용하고, ARP 요청을 생성하려면 다른 시스템을 사용하여 이를 테스트할 수 있습니다. 작동하게 되면 필요한 추가 설정 단계를 에뮬레이터에 설치할 수 있습니다.

편집: 동일한 네트워크에 두 대의 컴퓨터가 있고 그 중 하나가 Linux인 경우 시도해 볼 수 있는 간단한 시나리오는 다음과 같습니다.

  1. Linux 시스템에서는 sudo arp -s 10.0.0.51 01:23:45:56:78:9A pub다른 로컬 네트워크를 사용하는 경우 해당 IP 주소가 없어야 하지만 네트워크에 적합한 다른 IP 주소로 대체해야 할 수도 있습니다. 192.168.0.51가능성이 있을 수도 있습니다. 또한 Ubuntu는 임의의 이더넷 주소를 허용하지 않으므로 eth0 인터페이스의 이더넷 주소를 교체해야 할 수도 있습니다.
  2. 동일한 상자 또는 다른 상자에 sudo tcpdump -i eth0 arp네트워크의 모든 ARP 요청과 응답이 표시됩니다.
  3. 다른 컴퓨터, 아마도 완전히 다른 OS에서는 이 작업을 수행합니다 ping 10.0.0.51(또는 물론 사용하는 주소). 예상 결과: tcpdump 명령을 실행하면 ARP 요청과 ARP 응답이 표시되어야 합니다. 그렇지 않은 경우 이를 달성하려면 어떤 설정이 필요한지 알고 싶습니다. 이것이 우분투에만 해당되는 경우입니다. 결국에는 실패하게 되지만 ping(해당 IP 주소에 사용할 수 있는 호스트가 없음) 이 테스트에서는 이는 중요하지 않습니다. 이 메시지가 표시되면 ping: sendto: Host is downARP 응답이 없음을 알고 있음을 의미합니다.

답변1

나는 한때 같은 문제를 겪었습니다. Rui F Ribeiro가 옳았다는 것이 밝혀졌습니다. 프록시되어야 했던 IP 주소에 대한 경로를 놓쳤습니다.

arp -i eth0 -sD 192.168.8.10 eth0 pub
ip route add 192.168.8.10 via tun5

arp 요청은 ip Route 명령을 실행한 후에만 응답됩니다.

나는 이것을 명시적으로 언급하는 문서를 찾지 못했습니다.https://help.ubuntu.com/community/SSH_VPN, 기본적으로).

관련 정보