Networking

在特定網路上,我可以將內部 IP 地址映射到域名嗎?

  • February 27, 2017

我家有一台伺服器,有內部 IP 192.168.1.100。我使用動態 DNS 服務,以便我可以在http://foo.dynu.com外出時訪問它。當我在家裡有我的筆記型電腦時,我知道我可以通過將以下行添加到/etc/hosts.

192.168.1.100    foo.dynu.com

但是,有沒有辦法在我在家庭網路上時自動應用此重定向?(我通常通過特定的 wifi 連接進行連接,雖然我偶爾通過乙太網連接。如果這使事情變得複雜,那麼我很樂意只為 wifi 連接設置它。)我使用網路管理器。

此外,我通過 VPN 連接到網際網路,因此我的(OpenWRT)路由器上的任何配置都不太可能正常工作。

根據@garethTheRed 在評論中的建議,我創建了一個 Network Manager Dispatcher 掛鉤。

/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

引用自:https://unix.stackexchange.com/questions/343374