Networking
在特定網路上,我可以將內部 IP 地址映射到域名嗎?
我家有一台伺服器,有內部 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