내 데비안 컴퓨터는 현재 모든 네트워크 관련 활동(DHCP, 방화벽, 전화 통신, IPTV 등)을 처리하는 ISP 상자 뒤에 있는 내 집 LAN의 일부입니다. 주거용 홈 네트워크의 전형적인 사례.
곧 광섬유 변환기(광섬유 입력, RJ45 출력)와 ISP 상자 사이의 스위치로 서버를 이동하고 ISP로부터 DHCP를 통해 인터넷 공용 IP 주소를 수신하도록 구성할 계획입니다.
불행히도 내 ISP는 때때로 이 주소를 강제로 변경합니다(고정 IP의 "전문 서비스"를 유료로 제공하기 위해). 나는 인터넷에 표시된 내 IP 주소를 확인하고 불일치할 경우 외부 공개 이름의 DNS 항목을 수정하는 스크립트를 작성했습니다.
이 스크립트를 정기적으로 실행할 수 있지만 IP가 변경될 cron
때 이를 트리거하는 것이 더 흥미로울 것입니다 eth0
(ISP가 새 주소를 "상자에" 푸시할 때 발생하며 실제로는 내 서버입니다).
그러한 메커니즘(IP 주소 변경 시 수행할 작업)이 있습니까?
답변1
Network Manager 디스패처 스크립트를 사용하면 인터페이스가 작동하거나 작동 중지될 때 스크립트를 실행할 수 있습니다. 이는 ISP가 IP 주소를 변경할 때 수행됩니다(연결을 끊었다가 새 연결로 다시 가져옴).
에 있는 파일을 살펴보세요 /etc/NetworkManager/dispatcher.d/
. 내 것에는 20-chrony
좋은 템플릿을 만드는 간단한 스크립트가 있습니다 .
#!/bin/sh
# This is a NetworkManager dispatcher script for chronyd to set its NTP sources
# online/offline when a default route is configured/removed on the system.
export LC_ALL=C
if [ "$2" = "up" ]; then
/sbin/ip route list dev "$1" | grep -q '^default' &&
/usr/bin/chronyc -a online > /dev/null 2>&1
fi
if [ "$2" = "down" ]; then
/sbin/ip route list | grep -q '^default' ||
/usr/bin/chronyc -a offline > /dev/null 2>&1
fi
exit 0
스크립트와 함께 작동하도록 두 if
명령문을 조정할 수 있습니다. 또는 인터페이스가 나타날 때만 스크립트를 실행해야 하는 경우 첫 번째 명령문을 수정 if
하고 두 번째 명령문을 제거하면 됩니다.
답변2
dbus-monitor(1) 도구가 있는 시스템을 사용하는 경우 이 프로그램을 데몬으로 시작하여 인터페이스 주소 변경을 모니터링할 수 있습니다. 어떤 메시지인지는 확실하지 않지만 다음과 같습니다.
dbus-monitor 'some-filtering-expression' |
while read -r line; do
xargs /path/to/your/script "${line"}
done
또한 dbus-monitor를 필터 없이 자유롭게 실행하여 네트워크 연결이 이루어질 때 무슨 일이 일어나는지 확인할 수도 있습니다.