Em meu sistema eu tenho a eth0 (que pode ou não estar conectada) e um modem no ppp0 (que pode estar sempre ativo ou inativo). No caso em que ambas as interfaces estão ativas e ppp0 é a rota padrão, gostaria de encontrar uma maneira de determinar o endereço IP real do gateway de eth0. Tentei “netstat -rn”, mas nesta configuração a saída é:

 Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface xx.xx.xxx.xxx 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 192.168.98.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0 

Então, como faço para determinar o endereço do gateway da eth0? No caso acima, o endereço de gateway real é 192.168.98.1.

Comentários

  • O que é " eth0 ' s endereço de gateway " deveria ser?
  • Interfaces don ' t tem endereços de gateway, os netblocks têm. Um endereço de gateway diz ao kernel para onde encaminhar os pacotes destinados a algum host em alguma rede. Se o endereço estiver associado a uma determinada interface, essa interface será usada, mas o endereço é independente da interface.
  • Portanto, em meu aplicativo, devo tornar o eth0 o gateway padrão se ele tiver conectividade. Mas, para verificar a conectividade, faço uma rota temporária para meu servidor em boas condições. Mas, para fazer isso, preciso saber o endereço de gateway da eth0 ' s. Então, como posso determinar isso?
  • verifique: stackoverflow.com/a/15973156/1422630

Resposta

Suponha que eth0 seja a interface do cliente DHCP.
Uma opção é verificar o Arquivos de aluguel do cliente DHCP dhcpd.leases
O local e o nome dependem do sistema; em alguns sistemas Fedora, os arquivos em /var/lib/dhclient/ são arquivos de aluguel, onde a string interessante é assim:

 option routers 192.168.1.1; 

Outra opção, que funcionou para mim em uma caixa funtoo: dhcpcd -U eth0
imprime uma boa tabela, pronta para fonte em scripts

broadcast_address=192.168.1.255 dhcp_lease_time=86400 dhcp_message_type=5 dhcp_server_identifier=192.168.1.1 domain_name_servers="192.168.1.1 192.168.1.101" ip_address=192.168.1.101 network_number=192.168.1.0 routers=192.168.1.1 subnet_cidr=24 subnet_mask=255.255.255.0 

Existem outras opções como dhcping, dhclient -n, de acordo com o google e as páginas de manual, mas falham nas minhas caixas, mas pode funcionar para você.

Resposta

Seu erro é que você está associando as informações na saída do netstat com a interface em vez do destino. Os endereços de destino podem ter gateways associados. Quando você configura sua rede, está associando interfaces e gateways a conjuntos de endereços de destino – portanto, a pergunta que você precisa fazer é “qual é o gateway para destinos em 192.168.98 / 24? “Aposto que não deveria haver um, que dispositivos na ao alcance estão em ponte ou diretamente conectadas a essa Ethernet.

Observe que sua rota padrão é via ppp0 (a última linha é uma rota curinga, a máscara é todos zero para que nenhum bit seja realmente comparado, então os pacotes para esses endereços são enviados via ppp0). Portanto, os pacotes para qualquer destino que não esteja em 127.xx.xx.xx ou 192.168.98.xx irão eventualmente corresponder à máscara curinga e serão enviados por ppp0. Agora, como é um protocolo ponto a ponto, cada pacote enviado nessa interface vai para o único dispositivo diretamente endereçável nesse link, o que está na outra extremidade dele. Não há necessidade de especificar um gateway para ele porque todos os pacotes enviados por essa interface são enviados por meio desse dispositivo, seja o destino da Internet esse dispositivo ou não.

Agora: se você tiver um roteador acessível por eth0 que você usa quando pode, esse roteador quase certamente tem um endereço IP na faixa 192.168.98.xx, pelo menos tão provavelmente quanto 192.168.98.1, e quando esse roteador está ligado e realmente conectado à Internet você deseja que sua rota padrão, aquela para tudo que não está diretamente conectado a uma rede local, seja default via 192.168.98.1

Você pode ter o mais recente (é um termo relativo, já existe há muito tempo) ip comando em uso, tente ip route e se isso lhe der alguma saída, tente . Caso contrário, tente route help.


Portanto, sua eth0 interface simplesmente não “ tem um endereço de gateway. Pode haver outro dispositivo ou vários dispositivos conectados a essa ethernet dispostos a servir como um gateway. Você diz que sua rede tem um que responde no (puramente convencional) .1. Nenhuma lei diz que ele precisa ter esse endereço, e nenhuma lei diz que ele precisa anunciar sua presença. Existem algumas maneiras comuns, a mais comum delas sendo que as máquinas que executam software de roteamento também executem servidores dhcp e avisem a qualquer pessoa que fale dhcp sobre si mesmas. A resposta de MolbOrg dá uma ideia bastante típica da configuração, mas qualquer coisa que alguém possa sugerir neste ponto terá mais ou menos probabilidade de corresponder a sua rede.

Comentários

  • no meu caso, o gateway termina com .129, o que é bastante confuso .. é determinado quando o tethering USB está ativado, mas depois disso, não vejo como determinar isso (para as outras interfaces) após um route -n (onde os gateways não estão configurados (0.0.0.0). EDITAR: encontrei! stackoverflow.com/a/15973156/1422630

Resposta

Linux:

Você precisará abrir um Terminal. Dependendo da sua distribuição Linux, ele pode estar localizado nos itens de menu na parte superior ou na parte inferior da tela. Neste exemplo , usaremos o Fedora. Clique em Aplicativos > Ferramentas do sistema > Terminal.

Quando o terminal é aberto, digite o seguinte comando: ip route | grep default

O resultado disso deve ser semelhante ao seguinte:

joe$ ip route | grep default default via 192.168.1.1 dev eth0 proto static 

Neste exemplo, novamente, 192.168.1.1 é o endereço IP do seu gateway padrão (roteador).

insira a descrição da imagem aqui

Para obter mais informações sobre este tópico como encontrar o IP do seu gateway (linux / win / osx) .

Comentários

  • Apesar de não falar com o " quando é não é o gateway padrão " parte da pergunta, esta resposta contém a dica de que eu precisava (route -n) para obter o endereço IP do gateway para eth0 em um script bash: route -n | grep "^0\.0\.0\.0" | awk '{print $2}'

Resposta

Para obter o nome da NIC que é o gateway padrão, use este comando:

netstat -rn | grep -m 1 UG | awk "{print $8}" 

Se você tiver vários NIC ativos em sua máquina, este comando o ajudará a encontrar o NIC principal que possui o gateway padrão principal.

Comentários

  • grep XX | awk '{ action }' geralmente pode ser aglutinado em awk '/XX/ { action }'
  • Por favor, considere explicar o que e como o desempenho do seu comando
  • @ mattia.b89 Atualizei minha resposta.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *