特定のネットワークにいるときに内部IPアドレスをドメイン名にマッピングできますか?

特定のネットワークにいるときに内部IPアドレスをドメイン名にマッピングできますか?

自宅に内部IPを持つサーバーがあります192.168.1.100。私はhttp://foo.dynu.com外部にいてもアクセスできるように動的DNSサービスを使用しています。家にラップトップがあるときは、次の行を/etc/hosts

192.168.1.100    foo.dynu.com

しかし、このリダイレクトを自動的に適用する方法はありますか?ただホームネットワークにいるとき? (私は時々Ethernet経由で接続しますが、通常は特定のWi-Fi接続を介して接続します。問題が複雑な場合はWi-Fi接続に設定するだけです。)私はNetwork Managerを使用します。

また、VPNを介してインターネットに接続されているため(OpenWRT)、ルーターの構成が機能する可能性はほとんどありません。

答え1

コメントで@garethTheRedの提案に従ってネットワーク管理者のスケジューラフックを作成しました。

で次のファイルを作成します/etc/NetworkManager/dispatcher.d/99_foo.dynu.com.sh。このプロセスは、新しいネットワーク接続(イーサネットやWiFiなど)が検出されたときに発生します。次に、BSSID / SSIDとルーターが私に割り当てた静的IPという2つの方法で私の「ホームネットワーク」を識別します。 (現在イーサネットを介して接続している場合は機能しません。これは比較的まれです)。

#!/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

関連情報