Posso mapear um endereço IP interno para um nome de domínio, quando em uma determinada rede?

4

Eu tenho um servidor em casa, com o IP interno 192.168.1.100 . Eu uso um serviço DNS dinâmico para que eu possa alcançá-lo em http://foo.dynu.com quando eu estiver fora. Quando tenho meu laptop em casa, sei que posso me conectar diretamente ao servidor adicionando a seguinte linha a /etc/hosts .

192.168.1.100    foo.dynu.com

No entanto, existe uma maneira de aplicar automaticamente este redirecionamento somente quando estou em minha rede doméstica? (Eu normalmente conecto através de uma conexão wifi particular, embora eu ocasionalmente me conecte via ethernet. Se isso complicar, então fico feliz em apenas configurá-lo para a conexão wifi.) Eu uso o Network Manager.

Além disso, eu me conecto à internet através de uma VPN, então é improvável que qualquer configuração no meu roteador (OpenWRT) funcione.

    
por Sparhawk 08.02.2017 / 07:41

1 resposta

3

Como sugestão de @ garethTheRed nos comentários, eu criei um gancho do Network Manager Dispatcher.

Crie o seguinte arquivo em /etc/NetworkManager/dispatcher.d/99_foo.dynu.com.sh . Isso progride quando uma nova conexão de rede é detectada (ou seja, ethernet ou wifi). Em seguida, ele identifica minha "rede doméstica" de duas maneiras: o BSSID / SSID e o IP estático que meu roteador me atribui. (No momento não funciona quando eu conecto via ethernet, já que isso é relativamente raro.) Em seguida, ele anexa o mapeamento ao arquivo hosts se estivermos na rede doméstica; se não, então remove esta linha.

#!/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
    
por 09.02.2017 / 03:25