특정 네트워크에 있을 때 내부 IP 주소를 도메인 이름에 매핑할 수 있나요?

특정 네트워크에 있을 때 내부 IP 주소를 도메인 이름에 매핑할 수 있나요?

집에 내부 IP를 가진 서버가 있습니다 192.168.1.100. 저는 http://foo.dynu.com외부에 있을 때에도 액세스할 수 있도록 동적 DNS 서비스를 사용합니다 . 집에 노트북이 있을 때 다음 줄을 /etc/hosts.

192.168.1.100    foo.dynu.com

그런데 이 리디렉션을 자동으로 적용하는 방법이 있나요?오직홈 네트워크에 있을 때? (저는 가끔 이더넷을 통해 연결하지만 일반적으로 특정 Wi-Fi 연결을 통해 연결합니다. 문제가 복잡하다면 Wi-Fi 연결로 설정하면 됩니다.) 저는 Network Manager를 사용합니다.

또한 VPN을 통해 인터넷에 연결되어 있으므로 (OpenWRT) 라우터의 구성이 작동할 가능성이 거의 없습니다.

답변1

댓글에서 @garethTheRed의 제안에 따라 네트워크 관리자 스케줄러 후크를 만들었습니다.

에서 다음 파일을 만듭니다 /etc/NetworkManager/dispatcher.d/99_foo.dynu.com.sh. 이 프로세스는 새로운 네트워크 연결(예: 이더넷 또는 WiFi)이 감지되면 발생합니다. 그런 다음 BSSID/SSID와 라우터가 나에게 할당한 고정 IP라는 두 가지 방법으로 내 "홈 네트워크"를 식별합니다. (현재 이더넷을 통해 연결되어 있으면 작동하지 않습니다. 이는 상대적으로 드물기 때문입니다.) 홈 네트워크에 있는 경우 호스트 파일에 매핑을 추가하고 그렇지 않은 경우 이 한 줄을 제거합니다.

#!/bin/sh
# Map domain name to internal IP when connected to home network (via wifi)
# Partially inspired by http://sysadminsjourney.com/content/2008/12/18/use-networkmanager-launch-scripts-based-network-location/

WIFI_ID_TEST='Connected to 11:11:11:11:11:11 (on wlp3s0)
    SSID: WifiName'
LOCAL_IP_TEST='192.168.1.90'
MAPPING='192.168.1.100    foo.dynu.com'
HOSTS_PATH=/etc/hosts

IF=$1
STATUS=$2
# Either wifi or ethernet goes up
if [ "$STATUS" = 'up' ] && { [ "$IF" = 'wlp3s0' ] || [ "$IF" = 'enp10s0' ]; }; then
  # BSSID and my static IP, i.e. home network
  if [ "$(iw dev wlp3s0 link | head -n 2)" = "$WIFI_ID_TEST" ] && [ -n "$(ip addr show wlp3s0 to ${LOCAL_IP_TEST})" ]; then
    grep -qx "$MAPPING" "$HOSTS_PATH" || echo "$MAPPING" >> "$HOSTS_PATH"
  else
    ESC_MAPPING="^$(<<<"$MAPPING" sed 's/\./\\./g')$"
    sed -i "/${ESC_MAPPING}/d" "$HOSTS_PATH"
  fi
fi

관련 정보