지난 며칠 동안 다양한 시도를 했지만 성공하지 못했기 때문에 올바른 방향에 대한 몇 가지 조언이 필요합니다. 저는 일반적으로 bash와 Linux를 처음 사용합니다.
게이트웨이가 변경되는 시기(시작 시에만)를 감지하고 고정 IP 구성을 업데이트하려고 합니다. 처음 시작할 때 .net에 고정 IP 구성이 없었기 때문에 부분적으로 이 작업을 수행했습니다 /etc/dhcpcd.conf
. 처음 시작할 때 간단히 IP 주소를 ping하고 성공하면 출력에 따라 구성을 업데이트할 수 있습니다 ip r
. 이것은 아무런 문제 없이 작동합니다.
두 번째 부분은 게이트웨이가 변경되었는지(예: 사용자가 라우터 IP를 변경했거나 다른 구성으로 ISP를 변경한 경우) (시작 시에만) 감지하는 것입니다. 동일한 개념 - 외부 주소에 대해 ping을 수행하지만 이 경우 게이트웨이 정보(및 고정 IP)가 올바르지 않아 ping이 실패합니다.
예를 들어
고정 IP로 구성된 라우터는 사용자가 네트워크를 변경할 192.168.1.110
때 구성되며 해당 라우터는 이제 Raspberry Pi 부팅이며 고정 구성 과 게이트웨이를 갖습니다 .192.168.1.254
192.168.0.1
.1.110
.1.254
실패하면 스크립트는 새 게이트웨이 및 IP 주소(파일의 게이트웨이에 대한 공통 IP 주소 목록에서)를 추가하고 외부 주소를 ping하려고 시도합니다. 성공하면 정적 구성을 업데이트 /etc/dhcpcd.conf
하고 재부팅합니다. 실패하면 유효한 게이트웨이를 찾을 때까지 목록의 다음 IP 주소가 시도됩니다.
내가 아는 한, 새 경로와 새 기본 게이트웨이를 추가하고 핑을 해야 합니다. 이를 추가하면 작동했지만 핑은 여전히 실패했습니다(올바른 IP 주소에서 왔음에도 불구하고). 새 경로, 게이트웨이 및 IP 주소를 추가한 후 다음 명령의 출력입니다.
ip r
default via 192.168.0.1 dev eth0
192.168.0.1 dev eth0 scope link
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.110 metric 202
netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
192.168.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
ping -q -w 10 -c 1 -I 192.168.0.1 -r 1.1.1.1
Tue 25 Sep 14:07:00 UTC 2018 Testing new gateway...192.168.0.1
PING 1.1.1.1 (1.1.1.1) from 192.168.0.110 : 56(84) bytes of data.
--- 1.1.1.1 ping statistics ---
10 packets transmitted, 0 received, 100% packet loss, time 9330ms
올바른 방향으로 도움이나 조언을 주시면 감사하겠습니다.
답변1
첫째, 존재하지 않는 문제를 해결하려고 하는 것 같습니다...
당신은 말한다 ...
사용자가 네트워크를 변경하면 라우터는 이제 192.168.0.1입니다.
이는 자주 발생하지 않고 대부분의 경우 발생합니다(Tom's Guide 설문 조사에 따르면 >80%의 사람들이 비밀번호를 변경하지도 않습니다!).
그러나 당신이하려는 일은 dhcp를 사용하는 것이 더 나을 것입니다. 적어도 dhcp 서버에서 한 번만 재구성하면 모든 장치가 새로운 네트워크 레이아웃을 배울 것입니다.
하지만 dhcp에 대해 확고히 반대한다면 해결책은 간단하지 않지만 논리적으로 없애버릴 수는 있습니다...
수년 전에 저는 네트워크에 연결된 저장 장치에서 네트워크를 구성하는 일을 담당했습니다. 처음에는 DHCP를 사용해 보았으나 서버 응답이 없어 실패하면 IP 주소 0.0.0.0으로 자체 구성하고 tcpdump를 사용하여 몇 초(5 IIRC)의 네트워크 트래픽을 캡처했습니다. 그런 다음 통계 분석을 수행하여 로컬 주소 공간(ip 헤더의 src 및 dst를 보면 로컬 공간의 주소가 더 일반적임)을 찾고 ping을 사용하여 그 안에서 사용되지 않는 IP 주소 공간을 찾습니다. 라우터의 IP 주소도 arp 요청 통계를 통해 얻습니다. 트래픽이 좋은 네트워크에서는 잘 작동하지만 트래픽이 적은 네트워크에서는 잘 작동하지 않습니다. 네트워크 스위치가 더욱 보편화되고 하위 수준 허브가 단계적으로 폐지됨에 따라 스위치가 MAC 주소로 향하지 않는 트래픽을 필터링했기 때문에 작동이 중지되었습니다.
아, 재미있는 프로젝트의 추억이군요.