내 데비안 컴퓨터는 현재 내 집 LAN의 일부이며, ISP 상자 뒤에 앉아서 모든 네트워크 관련 활동(DHCP, 방화벽, 전화 통신, IPTV...)을 처리합니다. 주거용 홈 네트워킹의 전형적인 예입니다.
곧 광섬유 변환기(광섬유 입력, RJ45 출력)와 ISP 상자 사이의 스위치로 서버를 이동하고 DHCP를 통해 ISP로부터 인터넷 공용 IP 주소를 수신하도록 구성할 계획입니다.
불행히도 내 ISP는 (유료로 고정 IP를 사용하여 "전문 서비스"를 제공하기 위해) 이 주소를 수시로 변경하도록 강제합니다. 인터넷에 표시된 IP 주소를 확인하고 일치하지 않으면 외부 이름에 대한 DNS 항목을 수정하는 스크립트를 작성했습니다.
이 스크립트를 주기적으로 실행하여 이 작업을 수행할 수 있지만 cron
IP가 변경될 때 이를 트리거하는 것이 더 흥미로울 것입니다 eth0
(ISP가 "상자에 새 주소를 푸시할 때 발생"). 이는 실제로 현재 내 서버입니다.
이를 수행하는 데 사용할 수 있는 메커니즘(IP 주소 변경 시 작업)이 있습니까?
답변1
인터페이스가 작동하거나 작동 중지될 때 네트워크 관리자 스케줄러 스크립트를 사용하여 스크립트를 실행할 수 있으며, 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를 필터 없이 자유롭게 실행하여 네트워크 연결이 이루어질 때 어떤 일이 일어나는지 관찰할 수도 있습니다.