In mijn systeem heb ik eth0 (die al dan niet verbonden is) en een modem op ppp0 (die altijd omhoog of omlaag kan zijn). In het geval dat beide interfaces actief zijn en ppp0 de standaardroute is, zou ik “graag een manier willen vinden om het daadwerkelijke IP-adres van de gateway van eth0 te bepalen. Ik heb” netstat -rn “geprobeerd, maar in deze configuratie is de uitvoer:

 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 

Dus hoe bepaal ik het gateway-adres van eth0? In het bovenstaande geval is het daadwerkelijke gateway-adres 192.168.98.1.

Opmerkingen

  • Wat is " eth0 ' s gateway-adres " zou moeten zijn?
  • Interfaces don ' t hebben gateway-adressen, netblocks doen. Een gateway-adres vertelt de kernel waar pakketten naartoe gestuurd moeten worden die bestemd zijn voor een host op een netwerk. Als het adres is gekoppeld aan een bepaalde interface, dan wordt die interface gebruikt, maar het adres is onafhankelijk van de interface.
  • Dus in mijn applicatie moet ik eth0 de standaardgateway maken als het connectiviteit heeft. Maar om de connectiviteit te controleren, maak ik een tijdelijke route naar mijn bekende goede server. Maar om dit te doen, moet ik het gateway-adres van eth0 ' weten. Dus hoe kan ik dit bepalen?
  • controleer dit: stackoverflow.com/a/15973156/1422630

Antwoord

Veronderstel dat eth0 de DHCP-clientinterface is.
Een optie is om de DHCP-clientleasebestanden dhcpd.leases
Plaats en naam zijn afhankelijk van het systeem; op sommige Fedora-systemen zijn de bestanden onder /var/lib/dhclient/ leasebestanden, waarbij de interessante tekenreeks er zo uitziet:

 option routers 192.168.1.1; 

Een andere optie, die voor mij werkte op een funtoo-box: dhcpcd -U eth0
drukt een mooie tabel af, klaar om in scripts te gebruiken

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 

Er zijn andere opties, zoals dhcping, dhclient -n, volgens google en manpages, maar die mislukken op mijn boxen, maar kan voor u werken.

Answer

Uw fout is dat u “de informatie op de netstat-uitvoer associeert met de interface in plaats van de bestemming. Bestemmingsadressen kunnen gekoppelde gateways hebben. Wanneer u uw netwerk configureert, koppelt u interfaces en gateways aan sets bestemmingsadressen. De vraag die u zich dus moet stellen is wat is de gateway voor bestemmingen in 192.168.98 / 24? “Ik wed dat er geen is, dat apparaten in th binnen bereik zijn ofwel overbrugd of rechtstreeks verbonden met dat ethernet.

Merk op dat uw standaardroute is via ppp0 (de laatste regel is een wildcard-route, het masker is allemaal nul, dus er worden geen bits vergeleken, dus pakketten voor die adressen worden verzonden via ppp0). Dus pakketten voor elke bestemming die zich niet in 127.xx.xx.xx of 192.168.98.xx bevinden, zullen uiteindelijk overeenkomen met het jokertekenmasker en worden verzonden via ppp0. Nu, omdat het een point-to-point-protocol is, gaat elk pakket dat op die interface wordt verzonden naar het enige apparaat dat direct adresseerbaar is op die link, het apparaat aan het andere uiteinde ervan. Het is niet nodig om er een gateway voor te specificeren omdat elk pakket dat via die interface wordt verzonden, via dat apparaat wordt verzonden, ongeacht of de internetbestemming dat apparaat is of niet.

Nu: als je een router hebt die toegankelijk is via eth0 die u gebruikt wanneer u kunt, heeft die router vrijwel zeker een IP-adres in het bereik 192.168.98.xx, althans even waarschijnlijk als 192.168.98.1, en wanneer die router is ingeschakeld up en daadwerkelijk verbonden met internet u wilt dat uw standaardroute, de route voor alles dat niet rechtstreeks met een lokaal netwerk is verbonden, default via 192.168.98.1

is. Mogelijk hebt u de nieuwer (dat “een relatieve term, het bestaat nu al heel lang) ip commando in gebruik, probeer ip route en als dat je wat output geeft, probeer dan . Probeer anders route help.


Dus uw eth0 -interface heeft gewoon geen “t een gateway-adres. Er kan een ander apparaat of meerdere apparaten zijn aangesloten op dat ethernet die als gateway willen dienen. U zegt dat uw netwerk er een heeft die reageert op de (puur conventionele) .1. Geen wet zegt dat het dat adres moet hebben, en geen wet zegt dat het zijn aanwezigheid moet adverteren. Er zijn enkele veelvoorkomende manieren, de meest gebruikelijke is dat boxen met routingsoftware ook dhcp-servers draaien en iedereen die dhcp op die manier over zichzelf spreekt, vertellen. MolbOrg “s antwoord geeft een vrij typische smaak van de configuratie, maar alles wat iemand op dit moment kan suggereren, zal waarschijnlijk meer of minder overeenkomen met jouw specifieke netwerk.

Reacties

  • in mijn geval eindigt de gateway op .129 dat is nogal verwarrend .. het wordt bepaald wanneer de usb-tethering is ingeschakeld, maar daarna zie ik geen manier om dat te bepalen (voor de andere interfaces) na een route -n (waar de gateways niet zijn geconfigureerd (0.0.0.0). EDIT: vond het! stackoverflow.com/a/15973156/1422630

Antwoord

Linux:

Je moet een Terminal openen. Afhankelijk van je Linux-distributie kan deze zich in de menu-items bovenaan of onderaan je scherm bevinden. In dit voorbeeld , zullen we Fedora gebruiken. Klik op Toepassingen > Systeemwerkset > Terminal.

Wanneer terminal is open, typ het volgende commando: ip route | grep default

De uitvoer hiervan zou er ongeveer als volgt uit moeten zien:

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

In dit voorbeeld is 192.168.1.1 opnieuw uw standaard gateway (router) IP-adres.

voer hier een afbeeldingbeschrijving in

Voor meer informatie over dit onderwerp hoe u uw gateway-IP kunt vinden (linux / win / osx) .

Reacties

  • Ondanks dat je niet tegen de " hebt gesproken wanneer het niet de standaardgateway " -gedeelte van de vraag, dit antwoord bevat de hint die ik nodig had (route -n) om het gateway-IP-adres te verkrijgen voor eth0 in een bash-script: route -n | grep "^0\.0\.0\.0" | awk '{print $2}'

Antwoord

Gebruik deze opdracht om de NIC-naam te krijgen dat dit de standaardgateway is:

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

Als je meerdere actieve NICs op je computer hebt, helpt dit commando je om de hoofd-NIC te vinden die de standaard hoofdgateway heeft.

Opmerkingen

  • grep XX | awk '{ action }' kan gewoonlijk worden samengevoegd tot awk '/XX/ { action }'
  • Overweeg alstublieft om uit te leggen wat en hoe uw commando presteert
  • @ mattia.b89 Ik heb mijn antwoord bijgewerkt.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *