내 시스템에는 eth0 (연결되거나 연결되지 않을 수 있음)과 ppp0 (항상 작동 또는 중지 될 수 있음)에 모뎀이 있습니다. 두 인터페이스가 모두 작동하고 ppp0이 기본 경로 인 경우 eth0의 게이트웨이 IP 실제 주소를 확인하는 방법을 찾고 싶습니다. “netstat -rn”을 시도했지만이 구성에서 출력은 다음과 같습니다.

 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 

그러면 eth0의 게이트웨이 주소를 어떻게 결정합니까? 위의 경우 실제 게이트웨이 주소는 192.168.98.1입니다.

설명

  • " eth0 '의 게이트웨이 주소 "가 있어야합니까?
  • 인터페이스가 ' 게이트웨이 주소가없고 넷 블록도 있습니다. 게이트웨이 주소는 일부 네트워크에서 일부 호스트로 향하는 패킷을 전달할 위치를 커널에 알려줍니다. 주소가 주어진 인터페이스와 연결되어 있으면 해당 인터페이스가 사용되지만 주소는 인터페이스와 무관합니다.
  • 내 응용 프로그램에서 eth0이 연결되어 있으면 기본 게이트웨이로 설정해야합니다. 그러나 연결을 확인하기 위해 알려진 양호한 서버로 임시 경로를 만듭니다. 하지만 이렇게하려면 eth0 '의 게이트웨이 주소를 알아야합니다. 그렇다면 어떻게 확인할 수 있습니까?
  • 확인 : stackoverflow.com/a/15973156/1422630

답변

eth0가 DHCP 클라이언트 인터페이스라고 가정합니다.
한 가지 옵션은 DHCP 클라이언트 임대 파일 dhcpd.leases
장소와 이름은 시스템에 따라 다릅니다. 일부 Fedora 시스템에서 /var/lib/dhclient/ 아래의 파일은 임대 파일이며 흥미로운 문자열은 다음과 같습니다.

 option routers 192.168.1.1; 

펀투 박스에서 저에게 도움이 된 또 다른 옵션 : dhcpcd -U eth0
스크립트로 소싱 할 준비가 된 멋진 테이블을 인쇄합니다.

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 

Google 및 맨 페이지에 따르면 dhcping, dhclient -n와 같은 다른 옵션이 있지만 내 상자에서 실패합니다. 하지만 당신을 위해 일할 수도 있습니다.

답변

당신의 실수는 netstat 출력에있는 정보를 인터페이스와 연관시키는 것입니다. 대상 주소가 아닌 게이트웨이를 연결할 수 있습니다. 네트워크를 구성 할 때 인터페이스와 게이트웨이를 대상 주소 집합과 연결해야합니다. 따라서 질문해야 할 질문은 “대상에 대한 게이트웨이”입니다. 192.168.98 / 24? “하나가되어서는 안됩니다. 범위에서 브리지되거나 해당 이더넷에 직접 연결됩니다.

기본 경로는 ppp0를 통해 이루어집니다 (마지막 줄은 와일드 카드 경로이고 마스크는 모두 0이므로 비트가 실제로 비교되지 않으므로 해당 주소의 패킷은 ppp0를 통해 전송됩니다. 따라서 127.xx.xx.xx 또는 192.168.98.xx에없는 대상에 대한 패킷은 결국 와일드 카드 마스크와 일치하고 ppp0. 이제 “지점 간 프로토콜이기 때문에 해당 인터페이스에서 전송 된 모든 패킷은 해당 링크에서 직접 주소를 지정할 수있는 유일한 장치 인 다른 쪽 끝의 장치로 이동합니다. 이에 대한 게이트웨이를 지정할 필요가 없습니다. 모든 패킷이 해당 인터페이스를 통해 전송되기 때문에 인터넷 대상이 해당 장치인지 여부에 관계없이 해당 장치를 통해 전송됩니다.

현재 :

라우터는 거의 확실하게 192.168.98.xx 범위의 IP 주소를 가지고 있으며, 최소한 192.168.98.1이 아닐 가능성이 높으며 라우터의 전원이 켜져있을 때 기본 경로 (로컬 네트워크에 직접 연결되지 않은 모든 항목에 대한 경로)를 default via 192.168.98.1

로 설정하고 실제로 인터넷에 연결합니다.

최신 ( “상대적 용어로, 지금은 아주 오랫동안 사용되었습니다.) ip 명령을 사용 중입니다. ip route를 사용해보십시오. 그것이 당신에게 약간의 출력을 제공한다면 . 그렇지 않으면 route help를 시도해보세요.


그러므로 eth0 인터페이스에는 게이트웨이 주소입니다. 게이트웨이 역할을하려는 이더넷에 연결된 다른 장치 또는 여러 장치가있을 수 있습니다. 네트워크에 (순전히 일반적인) . 그 주소가 있어야한다고 말하는 법도없고 그 존재를 광고해야한다고 말하는 법도 없습니다. 몇 가지 일반적인 방법이 있습니다. 가장 일반적인 방법은 라우팅 소프트웨어를 실행하는 상자에서 dhcp 서버를 실행하고 dhcp를 사용하는 모든 사람에게 그 방법을 알리는 것입니다. MolbOrg의 답변 은 설정의 매우 일반적인 풍미를 제공하지만이 시점에서 누구든지 제안 할 수있는 것은 귀하의 특정 항목과 일치 할 가능성이 더 많거나 적을 것입니다. 네트워크.

코멘트

  • 제 경우에는 게이트웨이가 .129로 끝나는데 이는 매우 혼란 스럽습니다. USB 테 더링이 활성화되었을 때 결정되지만 그 후에는 route -n (게이트웨이가 구성되지 않은 곳 (0.0.0.0)) 후에 (다른 인터페이스의 경우) 확인할 방법이 없습니다. 편집 : 찾았습니다! stackoverflow.com/a/15973156/1422630

답변

Linux :

터미널을 열어야합니다. Linux 배포에 따라 화면 상단 또는 하단의 메뉴 항목에있을 수 있습니다.이 예에서는 , Fedora를 사용합니다. 응용 프로그램 > 시스템 도구 > 터미널을 클릭합니다.

터미널이 열고 다음 명령을 입력합니다. ip route | grep default

이 출력은 다음과 유사해야합니다.

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

이 예에서도 192.168.1.1이 기본 게이트웨이 (라우터) IP 주소입니다.

여기에 이미지 설명 입력

이 주제에 대한 자세한 내용은 게이트웨이 IP를 찾는 방법 (linux / win / osx) .

댓글

  • "에 말하지 않아도 질문의 기본 게이트웨이 " 부분이 아닙니다.이 답변에는 게이트웨이 IP 주소를 얻기 위해 필요한 힌트 (route -n)가 포함되어 있습니다. bash 스크립트의 eth0 : route -n | grep "^0\.0\.0\.0" | awk '{print $2}'

Answer

기본 게이트웨이 인 NIC 이름을 얻으려면 다음 명령을 사용하십시오.

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

컴퓨터에 여러 활성 NIC가있는 경우이 명령을 사용하면 기본 기본 게이트웨이가있는 기본 NIC를 찾을 수 있습니다.

설명

  • grep XX | awk '{ action }'는 일반적으로 awk '/XX/ { action }'
  • 로 통합 될 수 있습니다.

  • 당신의 명령이 무엇을 수행하고 어떻게 를 수행하는지 설명해주십시오.
  • @ mattia.b89 답변을 업데이트했습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다