自宅に内部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