내 시스템에는 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 답변을 업데이트했습니다.
로 통합 될 수 있습니다.