라우터 뒤에있는 경우 명령 줄에서 공용 IP 주소를 어떻게 얻을 수 있습니까?


37

명령 줄에서 공용 (WAN) IP 주소를 얻는 방법이 있습니까? ISP가 할당 한 동적 IP 주소를 가진 라우터 (LAN 네트워크) 뒤에 있습니다.

외부 웹 서비스 (예 :)를 사용하는 솔루션을 보았지만 ifconfig.me외부 서비스없이 수행 할 수 있는지 알고 싶습니다.


네트워크 설정에 대한 자세한 내용을 추가 할 수 있습니까? 당신은 라우터 / 스위치 뒤에 합니까 인터넷에 액세스 할 수 있습니다 당신은 라우터 / 스위치가 ISP로부터 받고있는 WAN IP 주소를 확인하려는?
slm

@slm 나는 라우터 뒤에 있고 개미는 ISP에 의해 라우터에 할당 된 IP를 찾기 위해
user61954

방금 답변에 추가 한 세 번째 방법을 참조하십시오. 라우터에서 WAN IP를 얻는 방법이 있는지 확인하고 싶을 것입니다. 라우터는 어떤 제조사 / 모델입니까?
slm

어떤 종류의 외부 서비스를 쿼리해야합니다. 일반적으로 컴퓨터는 다른 컴퓨터가 연결에서 오는 IP 주소를 모릅니다.
David Schwartz

답변:


27

시스템을 가정하면 2 개 이더넷 장치를 가지고, eth0그리고 eth1eth0LAN에 연결되어 IP를 192.168.1.X하고 말할 eth1장치가 다음 사용하려는거야 당신의 ISP (WAN)에 연결 ifconfig을 위해 IP를 얻기 위해 명령을 WAN 쪽.

참고 : 첫 번째 2 가지 방법은 2 개의 이더넷 장치가있는 컴퓨터에 대해 실행 중이고 그 중 하나가 ISP (케이블 모뎀 및 / 또는 DSL 모뎀)에 연결되어 있다고 가정합니다. 이 시나리오에서는 이더넷 장치 (eth1)가 인터넷상의 IP 주소 (WAN IP)로 구성됩니다.

첫번째 방법

                          +------------------------+
  +--------+    WAN IP    |   Computer that wants  |  LAN IP
  |Internet|--------------|     to know WAN IP     |------------
  +--------+  54.234.1.33 | +------+      +------+ | 192.168.1.1
                          +-| eth1 |------| eth0 |-+
                            +------+      +------+

% ifconfig eth1 | awk '/inet / { print $2 }' | sed -e s/addr://
54.234.1.33

ip명령을 사용할 수도 있습니다 .

% ip addr show eth1 | awk '/inet/ {print $2}' | sed 's#/.*##'
54.234.1.33

두 번째 방법

LAN에만있는 시스템에서이 정보를 찾아야하는 경우 암호가없는 ssh 키를 설정하고이를 LAN 시스템의 계정에 추가하여 WAN 액세스와 같이 시스템에 원격으로 액세스 할 수 있습니다.

                                                            +----------------+
  +--------+    WAN IP      +-------------+      LAN IP     | Computer that  |
  |Internet|----------------|remote-server|-----------------| wants to know  |
  +--------+  54.234.1.33  +----+-----+----+  192.168.1.x  +----+ WAN IP     |
                           |eth1|     |eth0|               |eth0|------------+
                           +----+     +----+               +----+

% ssh ruser1@remote-server "ifconfig eth1 | awk '/inet / { print \$2 }' | sed -e s/addr://"
54.234.1.33

세번째 방법

WAN 액세스가 가능한 상자에 ssh를 연결할 수없고 Linksys 또는 Netgear 상자와 같은 홈 라우터 / 스위치를 사용중인 경우. HTTP 상태 페이지를 통해 해당 장치에서 IP를 가져올 수 있습니다. 과거 에도이 작업을 수행했습니다 . 이 whatismyip.com 포럼 게시물에 설명 된 것과 비슷한 내용 입니다.

                                                               192.168.1.2
                                                            +----------------+
  +--------+    WAN IP      +-------------+      LAN IP     | Computer that  |
  |Internet|----------------|router/switch|-----------------| wants to know  |
  +--------+  54.234.1.33   +-------------+   192.168.1.x  +----+ WAN IP     |
                              192.168.1.1                  |eth0|------------+
                                                           +----+

# something like this....

% wget -q -O - http://<username>:<password>@192.168.1.1/Status_Router.asp | grep "ipaddress" | cut -d" " -f2

참고 : 이 방법은 Linksys, Netgear 등 브랜드에 관계없이 사용중인 라우터 / 스위치에 따라 크게 달라집니다. 각각에는 WAN IP가있는 고유 한 페이지가 있습니다.

네번째 방법

WAN IP 주소를 다시보고하는 외부 인터넷 사이트에 대해 쿼리를 보냅니다.

참고 : 나는 원래의 질문에 그들이이 접근법에 대한 대안을 찾고 있다고 언급했지만이 답변이 모든 기반을 포함하도록 여기에 넣었습니다.

                                                        +---------------+
  +-------------+   +--------+   +------+     LAN IP    | Computer that |
  |whatsmyip.com|---|Internet|---|router|---------------| wants to know |
  +-------------+   +--------+   +------+  192.168.1.x +----+ WAN IP    |
you're 54.234.1.33                                     |eth0|-----------+
                                                       +----+

# 1st server
% wget -qO - ipv4bot.whatismyipaddress.com
54.234.1.33

# 2nd server
% curl 'https://api.ipify.org?format=json'

{"ip":"54.234.1.33"}
% curl 'https://api.ipify.org?format=txt'
54.234.1.33

# 3rd server
% curl -s checkip.dyndns.org | sed 's#.*Address: \(.*\)</b.*#\1#'
54.234.1.33

추가 정보는 여기에 있습니다 : HOWTO : 커맨드 라인에서 외부 IP 주소를 확인하십시오


나는 라우터에 내 시스템 커넥트 같은 것을 가지고 있고 그것은 intrnet에 연결되어
user61954

5
그가 직접 연결되어 있지 않다고 말했기 때문에 어떤 eth*장치도 WAN IP 를 갖지 않습니다 . 라우터가 ssh를 지원하지 않으면 액세스 권한이 있으며 ifconfig이면 작동하지 않습니다. downvoting이 아니라 이것을 시도하는 사람은 누구나 알고 있습니다.
AaronLS

그의 질문을 다시 읽으십시오. 그는 인터넷 액세스가 아닌 LAN 액세스 권한이 항목 1에 있다고 말합니다. 항목 # 2, 나는 그 중 B에있는 다른 시스템을 가지고 있으리라 믿고있어 그의 ISP에서 동적 IP를 얻고 말한다 / 자신의 LAN 만 연결 및 인터넷 w 또는 그가 홈 라우터 / 스위치 B / 그와 인터넷 승 있어요.
slm

Downvoters, 의견을 남기십시오.이 답변은 지금까지 가장 완전하지만 사람들은 다운 투표를하고 있습니다. @ user61954는 자신의 의견에서 라우터 뒤에 있기 때문에 내가 설명한 방법 중 하나가 효과가 있다고 말했습니다.
slm

나는 공감했다. 그러나 첫 번째와 두 번째 방법은 작동하지 않으며 localip 주소 만 반환합니다. 감사!
Jared Burrows

12

시스템에 컬이 설치된 경우 (대부분의 경우)

curl ifconfig.me

이봐, 고마워, 이것은 나에게 도움이됩니다. 한가지 질문입니다. "ifconfig.me"는 무엇입니까 ifconfig 기능을 알고 있지만 보통은 그렇지 않습니다. 그것에 대해 읽거나 설명 할 수있는 링크를 제공해주십시오. -업데이트-질문을 읽지 못했습니다. ups
Aby W

ifconfig.me는 IP를 제공하는 웹 사이트입니다.
Rory

ifconfig.me는 https를 지원하지 않으므로 스푸핑 될 수 있습니다. VPN이 켜져 있는지 확인하는 데 사용하지 않는 것이 좋습니다.
Dan Dascalescu

9

UPNP가있는 NAT 라우터 뒤에있는 경우 miniupnpc를 사용하여 wan ip 주소를 감지 할 수 있습니다.

# debian/ubuntu setup: 
# sudo apt-get install miniupnpc

# get WAN IP address from UPNP router:
upnpc -s | grep ^ExternalIPAddress | cut -c21-

cron과 같은 스크립트에서 다음과 같이 사용할 수 있습니다.

#!/bin/bash
#
# In this example, lynx is used as http client. you could also use something else
# like wget etc.
# debian/ubuntu lynx setup: 
#
# apt-get install lynx
#

EXTIP=`upnpc -s | grep ^ExternalIPAddress | cut -c21-`
DDNSURL="http://your-ddns-service.com/update/my/ip/to/$EXTIP"
TFILE=/tmp/.WAN_IP
if [ -f $TFILE ]; then
        OXTIP=`head -1 $TFILE`
else
        touch $TFILE
        OXTIP="NULL"
fi
if [ "$EXTIP" != "$OXTIP" ]; then
        mv $TFILE "$TFILE~"
        echo "$EXTIP" > $TFILE
        lynx -source $DDNSURL > /dev/null
        echo "================================"
        date
        echo "WAN_IP = $EXTIP"
fi

5

대부분의 경우 외부 서비스를 사용할 수 없거나 사용할 수없는 경우 (다른 답변이 이미 표시된 것처럼) 라우터가 외부 IP를 얻는 방법을 제공해야합니다. 외부 서비스의 경우 대부분의 다른 답변에서 웹 서비스가 사용됩니다. Unix SE 에서이 답변 은 DNS를 대신 사용하는 것이 좋습니다.

예를 들어, 사용 dig오픈 DNS 리졸버로 :

dig +short myip.opendns.com @resolver1.opendns.com

+1, 그러나 마지막 날에 curl ident.me우리가 특정 서비스에 의존 하는 것과 같은 사용 ( myip.opendns,comDNS 서버 에서 특수한 경우)
nhed

4

ssh 또는 curl을 통해 라우터에서 정보를 가져옵니다.

컬을 사용하여 공용 IP에 대한 dyndns를 요청하지만 그러한 명령이 적합하지 않은 것 같습니다.

curl http://checkip.dyndns.org 2> /dev/null| perl -pe 's,.*Address: (\d+\.\d+\.\d+\.\d+).*,$1,'


2

불행히도 원격 서비스 연결과 관련이없는 NAT와 같은 메커니즘을 탐지 할 수있는 방법이 없습니다. NAT는 본질적으로 손상된 서비스 외에 사용자에게 완전히 투명하며 NAT 검색을위한 표준 프로토콜이 없습니다.

그러나 외부 서비스와 관련하여 필자는 필자가 작성한 빠르고 간단한 ident.me를 제안해야합니다. ident.me는 IPv4와 IPv6 모두에 사용할 수 있습니다. 가장 간단한 형태로 사용할 수 curl ident.me있으며 전체 API는 http://api.ident.me/에 문서화되어 있습니다.


1

라우터가 NAT PMP (Port Mapping Protocol)를 지원하는 경우 natpmp를 사용하여 공용 IP를 검색 할 수 있습니다.

natpmpc라는 Linux natpmp 라이브러리에 대한 명령 행 인터페이스가 있습니다. 우분투에서는 natpmp-utils 패키지에 있습니다. 라우터가 natpmp를 지원하지 않는 것 같으므로 natpmpc 유틸리티가 퍼블릭 IP를 반환할지 확신 할 수 없습니다.


0

당신이 찾고있는 리눅스 명령 ifconfig은 인터넷에 직접 연결되어 있다고 가정합니다.

그렇지 않은 경우 프록시 또는 특수 라우팅을 통해 액세스하는 경우 다른 호스트가 나타내는 것처럼 가장 쉬운 방법은 다른 호스트에 로그인 / 액세스하여 호스트에서 확인하는 것입니다.

또한이 질문에 대해 친절한 이웃 시스템 관리자와상의 할 수도 있습니다.


ifconfig더 이상 사용되지 않습니다.
BatchyX

"traceroute 명령이지만 lan의 로컬 IP 인 192.168.1.1을 제공합니다." 랜이있는 것 같아요. 따라서 어딘가에 일종의 라우터 / 게이트웨이 / NAT가 있어야합니다. 그러면 op의 comp가 인터넷에 직접 연결되어 있지 않으므로 ifconfig는 공용 IP 주소를 제공하지 않습니다.

@BatchyX. 어떤 OS를 사용하고 있습니까? 내가 실행중인 모든 시스템에는 ifconfig가 있습니다. Fedora, CentOS, Ubuntu 등
slm

2
@ 배치 : 그리고 당신은 그 정보를 어디서 얻습니까? 나는 당신에 동의하지 않습니다.
mdpc

1
@sim : 명령이 있다고해서 더 이상 사용되지 않는 것은 아닙니다. 그냥 보면 ifconfig최신 버전 날짜입니다. 이제 ìproute2최신 릴리스를보십시오. 출처는 lartc.org/howto/lartc.iproute2.html#LARTC.IPROUTE2.WHY
BatchyX

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.