arp 응답을 활성화하는 구성이 무엇인지 알고 싶습니다.
두 개의 인터페이스가 있는 Ubuntu 시스템이 있습니다. 하나는 비공개 LAN에 연결된 이더넷이고 다른 하나는 공용 인터넷에 연결된 Wi-Fi입니다. 사설 LAN에서 인터넷에 접속하기 위해 일시적으로 컴퓨터가 필요했기 때문에 사설 LAN의 주소를 WiFi 네트워크 LAN에 매핑하도록 SNAT를 설정했습니다.
편집: 주소를 다시 번역하기 위해 DNAT도 설정했다는 사실은 언급하지 않았습니다.
8.8.8.8로 핑을 보내면 아웃바운드 히트가 발생하지만, 다시 돌아왔을 때 WiFi 라우터는 NAT 주소(192.168.7.33)를 "소유한 사람"을 알지 못하므로 arp 요청을 보냅니다.
하드웨어 주소가 이더넷 링크와 연결된 하드웨어 주소인 곳에서 실행했습니다 sudo arp -v -i wlp1s0 -s 192.168.7.33 84:7b:eb:35:a4:e0
(또한 "pub" 뒤에 동일한 명령을 실행했지만 여전히 전송되지 않았습니다). 이제 내 arp 테이블에 있습니다...:
Address HWtype HWaddress Flags Mask Iface
192.168.7.33 ether 84:7b:eb:35:a4:e0 CM wlp1s0
그러나 Ubuntu 상자는 여전히 arp에 응답하지 않습니다.
19:26:59.542278 IP 192.168.7.33 > google-public-dns-a.google.com: 19:27:51.477054 IP 192.168.7.33 > 8.8.8.8: ICMP echo request, id 3312, seq 2692, length 64
19:27:51.493773 ARP, Request who-has 192.168.7.33 tell 192.168.7.254, length 46
첫 번째 메시지는 Google에 대한 핑이고 두 번째 메시지는 192.168.7.33에서 라우터를 찾는 것입니다.
이 글을 참고하세요, 요청된 IP 주소가 다른(비활성화된) 인터페이스와 연결된 경우 Linux는 ARP 요청 메시지에 응답하지 않습니다., 커널의 IP 라우팅 테이블을 확인했습니다.
sudo ip route show table local
broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
broadcast 192.168.3.0 dev enp0s31f6 proto kernel scope link src 192.168.3.12
local 192.168.3.12 dev enp0s31f6 proto kernel scope host src 192.168.3.12
broadcast 192.168.3.255 dev enp0s31f6 proto kernel scope link src 192.168.3.12
broadcast 192.168.7.0 dev wlp1s0 proto kernel scope link src 192.168.7.117
local 192.168.7.117 dev wlp1s0 proto kernel scope host src 192.168.7.117
broadcast 192.168.7.255 dev wlp1s0 proto kernel scope link src 192.168.7.117
이 질문에서는 사용자가 해당 주소(내 NAT와 다름)에 대한 경로를 설정했기 때문에 계속해서 경로를 추가했지만 여전히 ARP가 없습니다.
경로-n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.7.254 0.0.0.0 UG 600 0 0 wlp1s0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 wlp1s0
192.168.3.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s31f6
192.168.7.0 0.0.0.0 255.255.255.0 U 600 0 0 wlp1s0
192.168.7.33 192.168.3.10 255.255.255.255 UGH 0 0 0 enp0s31f6
내 컴퓨터가 ARP 요청에 응답할 수 있도록 Ubuntu에 변경할 수 있는 설정이 있습니까? 그렇지 않다면, 우리가 응답하지 않은 이유를 알아보기 위해 다음으로 어디를 살펴보아야 합니까?
편집 2: NAT를 설정하는 방법은 다음과 같습니다.
sudo iptables -t nat -A POSTROUTING -s 192.168.3.10 -j SNAT --to-source 192.168.7.33
sudo iptables -t nat -A PREROUTING -d 192.168.7.33 -j DNAT --to-dest 192.168.3.10
편집 3: DNAT/SNAT에서 가장 무도회 작업으로 변경하면 더 쉽고 확장 가능합니다.
답변1
ARP 응답이 자동으로 활성화됩니다. /proc
또는 의 일부 항목을 사용하여 기능을 끌 수도 있지만 /sys
검색해야 합니다.
당신이 가지고 있는 것은 상당히 표준적인 NAT 사례입니다. NAT 설정 방법과 같은 가장 중요한 정보를 제공하지 않았지만 일반적으로 다음과 같이 수행됩니다.
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -t nat -F
iptables -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
이를 통해 전달, iptables
규칙 지우기, 기본 정책 설정, 체인 필터링 설정이 가능해 FORWARD
에서 ~ 까지 $INTIF
의 모든 패킷이 허용되지만 반대 방향의 경우 $EXTIF
연결 추적기( )로 nf_conntrack
추적 해야 합니다. 마지막으로 전달되는 모든 패킷은 인터페이스에 존재하는 주소 MASQUERADED
와 함께 제공되므로 해당 주소가 변경되더라도 항상 올바른 주소를 사용하게 됩니다. SNAT
추가 경로가 필요하지 않습니다. 원하는 경우 소스 주소별로 전달을 제한할 수 있습니다.
$INTIF
은 내부 인터페이스(LAN)이고, $EXTIF
는 외부 인터페이스(WLAN)입니다. Ubuntu가 사용하는 도구(systemd 등)를 사용하여 이를 지속적으로 만들 수 있습니다.
이것은 기본적으로 작동하며 조작이 필요하지 않습니다. 연결 추적기 DNAT는 추가 규칙 없이 패킷을 올바른 주소로 반환하고 이를 다시 LAN으로 전달한 다음 LAN 인터페이스(보내야 하는 위치)에서 ARP를 보냅니다.
귀하의 설정이 다소 다른 것으로 생각됩니다. 이로 인해 잘못된 위치에 흥미로운 ARP가 표시되는 것입니다.