리눅스 네트워크 관리
네트워크 진단 명령
ifconfig
ifconfig는 interface config의 약자로 네트워크 인터페이스 관련 명령어로 설정하거나 직접 확인하는 명령어이다.
ifconfig명령으로 설정한 것은 시스템을 재부팅하면 그 정보가 사라진다. 따라서 지속적으로 유지하려면 /etc/rc.d/rc.local파일에 위의 설정을 입력해놓거나 /etc/sysconfig/network-scripts/ifcfg-eth0 파일에 설정해 놓아야 한다.
$ ifconfig [interface] [address] [up/down] [옵션]
옵션 | 설 명 |
---|---|
interface | NIC(Network Interface Card)를 말하며, 보통 랜(LAN)카드 또는 이더넷(Ethernet) 카드라 한다. 리눅스에서는 랜카드가 하나인 경우 eth0으로 설정되며, 만약 두개를 장착하면 두번째 랜카드는 eth1이 된다. |
address | 보통 IP가 부여된다. |
up/down | 네트워크를 활성화/비활성화 시킨다. |
option | netmask, broadcast등을 설정할 수 있다. |
ifconfig의 항목 설명
항 목 | 설 명 |
---|---|
Link encap | Ehternet 장치에 사용중인 프로토콜이 Ethernet임을나타낸다. |
Hwaddr | 이더넷 카드에 있는 고유 하드웨어 주소로, 48비트로 되어 있다. 보통 MAC(Media Address Control)주소라고도 한다. |
inet addr | IP주소를 나타낸다. |
Bcast | 브로드 캐스트 주소를 나타낸다. |
Mask | 넷마스크(Netmask)값을 나타낸다. |
UP | 인터페이스가 활성화되어 있음을 나타낸다. |
BROADCAST | 브로드 캐스트를 사용한다. |
RUNNING | 동작중임을 뜻한다. |
MULTICAST | 멀티 캐스트를 사용한다. |
MTU | Maximum Transmission Unit의 약자로 한 번에 전송할 수 있는 최대패킷의 크기를 말한다. |
Metric | 라우팅할 때 참조되는 거리로 로컬인 경우 값이 1이 된다. |
RX/TX | 받은 패킷/전송한 패킷의 총 개수(packets), 그 중 에러가 발생한패킷의 수는 errors에, 그냥 버린 패킷의 수는 dropped, 손실된패킷의 개수는 overruns에 표시 된다. |
collisions | 충돌이 발생한 패킷의 수 |
Interrupt | Ethernet 카드가 현재 사용중인 IRQ |
Base address | Ethernet 카드가 현재 사용중인 주소 |
ifconfig를 이용한 IP Alias 사용하기
Ethernet 카드에 IP를 하나만 부여하는 것이 아니라 여러 개의 IP를 부여할 수 있다. 이러한 기능을 IP Alias라고 한다. 이 설정을 할 수 있는 명령어 역시 ifconfig이다. 첫 번째 Ethernet 카드에 추가로 IP를 부여할 경우에는 eth0:0, eth0:1 등으로 표기하여 부여하면 된다.
$ ifconfig eth0:0 192.168.1.210
실제 사용의 예
- ethernet 카드에 부여된 IP확인
ifconfig [인터페이스이름] : 현재 네트워크 인터페이스에 설정되어 있는 값을 알 수 있다. 만약 인터페이스 이름을 입력하지 않으면 모든 인터페이스의 값을 출력한다. ifconfig -a 한 것과 같다.
$ ifconfig
설명 : 현재 설정된 모든 이더넷카드의 IP설정을 보여준다.
$ ifconfig eth0
설명 : 첫번째 이더넷카드인 eth0의 IP설정을 보여준다.
- ethernet카드의 작동을 중지시키거나 활성화시킨다.
$ ifconfig [인터페이스 이름] [up | down]
설명 : 특정 네트워크 인터페이스를 활성화(up)하거나 비활성화(down)시킨다.
$ ifconfig eth0 down
설명 : eth0 카드의 작동을 중지시킨다. ifdown eth0과 같다.
$ ifconfig eth0 up
설명 : eth0카드의 작동을 활성화한다. ifup eth0과 같다.
- ethernet 카드에 IP주소, 넷마스크값, 브로드캐스트 값을 부여한다.
ifconfig [인터페이스이름] [IP주소] [기타설정] [up|down] : 네트워크의 설정
$ ifconfig eth0 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255 up
설명 : 첫번째 랜카드인 eth0에 IP주소를 192.168.0.2를 부여하고 Netmask는 255.255.255.0 Broadcast는 192.168.0.255를 부여하고 활성화시킨다.
$ ifconfig eth0 192.168.0.2 up
설명 : 첫 번째 랜카드인 eth0에 192.168.0.2를 부여하고 활성화시킨다. 보통 IP 주소만 부여하면 Netmask 등은 자동 설정된다. 하지만 기본 클래스인 A,B,C 클래스가 아닌 다른 서브넷을 사용할 경우에는 꼭 부여한다.
$ ifconfig eth0 192.168.3.1 netmask 255.255.255.128 up
mii-tool
mii-tool(Media Independent Interface tool)은 네트워크 인터페이스의 연결 상태를 확인하고, 강제적으로 랜카드의 속도와 duplex 모드(100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD)를 변경하는데 사용하는 유틸리티이다.
연결 상태 확인
mii-tool은 옵션없이 실행하면 랜카드의 속도, duplex 모드, 연경 상태를 보여주며 각 옵션을 사용하여 각 상태를 확인할 수 있다
- -v 옵션을 추가하면 보다 상세한 MII 상태를 볼 수 있다.
- -w 옵션을 사용하면 실시간으로 연결 상태를 확인할 수 있다.
만약 갑자기 no link라고 나온다면 회선에 문내가 생겼거나 연결된 장비간의 회선속도나 duplex 모드가 맞지 않은 경우이다.
속도 변경
autonegotiation으로 두 장비간의 연결 속도와 duplex 모드를 자동으로 맞추게 되지만 제대로 되지 않아 충돌(Late Collision)이 많이 발생하는 경우나 원하는 속도로 변경을 해야 할 때 mii-tool은 유용하게 쓰일 수 있다.
100MB, Full duplex 모드로 변경하는 예이다.
$ mii-tool -F 100baseTx-FD eth0
원래 autonegotiation로 restart하려면 -r 옵션을 사용하면 된다.
ethtool
thtool 명령은 네트워크 인터페이스의 상황을 조사할 수 있다.
실제 사용의 예
정상적으로 동작하고 있으면, 아래와 같이 표시된다.
설명 : 이더넷(ethernet) 케이블이 빠져 있는 경우에는 Link detected : no라고 표시된다. 1000BASE의 NIC를 사용하고 있는데 스피드가 100Mb/s이었거나, 듀플렉스가 half 되어있는 경우는 허브와의 궁합이나 케이블의 이상 등을 고민하기 바란다. ethtool를 실행해 Speed나 Duplex의 값이 이상할 때는 아래와 같이 강제적으로 수정해 상황이 개선되는지 확인한다.
$ ethtool -s eth0 speed 100 // 속도를 100Mb/s로 설정
$ ethtool -s eth0 duplex full // 듀플렉스를 full로 설정
netstat
netstat는 네트워크의 연결 상태를 확인하는 명령
$ netstat [옵션] [address family options]
옵 션 | 설 명 |
---|---|
-a | 연결된 모든 소켓을 출력 |
-n | 기호화된 호스트나 포트이름, 유저이름 대신에 숫자로 표시한다. 예를 들면 www은 80으로 표기 |
-p | 소켓에 대한 PID/프로그램을 출력 |
-r | 라우팅 테이블을 출력 |
-i | 인터페이스 테이블을 출력 |
-s | SNMP(Simple Network Managemanet Protocol)와 같은 네트워크 통계를 출력 |
-c | 계속되는 리스트를 출력 |
-t | tcp를 이용하여 접속한 리스트를 출력 |
-u | udp를 이용하여 접속한 리스트를 출력 |
address family options | 형식 : --protocol (inet, unix, ipx, ax25등) 예제) netstat --inet |
실제 사용의 예
$ netstat -r
설명 : 라우팅 테이블에 대한 정보를 출력한다. route 명령의 결과와 유사하다.
$ netstat -t
설명 : tcp로 접속한 리스트를 출력한다.
$ netstat --inet -p
설명 : 인터넷으로 접속한 상태를 보여주고 프로그램과 PID를 출력한다.
netstat 명령의 결과에서 state 부분에 나타나는 연결 상태
상태 항목 | 설 명 |
---|---|
LISTEN | 서버의 데몬이 떠서 접속 요청을 기다리는 상태 |
SYS-SENT | 로컬의 클라이언트 어플리케이션이 원격 호스트에 연결을 요청한 상태 |
SYN_RECEIVED | 서버의 원격 클라이언트로부터 접속 요구를 받아 클라이언트에게 응답을 하였지만, 아직 클라이언트에게 확인 메시지는 받지 않는 상태 |
ESTABLISHED | 3Way-Handshaking이 완료된 후 서로 연결된 상태 |
FIN-WAIT1, CLOSE-WAIT, FIN-WAIT2 | 서버에서 연결을 종료하기 위해 클라이언트에게 종결을 요청하고 회신을 받아 종료하는 과정의 상태 |
CLOSING | 흔하지 않지만 주로 확인 메시지가 전송도중 분실된 상태 |
TIME-WAIT | 연결은 종료되었지만 분실되었을지 모를 느린 세그먼트를 위해 당분간 소켓을 열어놓은 상태 |
CLOSED | 완전히 종료된 상태 |
traceroute
특정 호스트 또는 연결된 노드를 알아보는 명령어로 특히 라우팅에 어떤 장애가 있을 경우 그 위치를 파악할 수 있다. 윈도우 계열의 tracert 명령과 유사하다. 루트 권한자만 사용가능한 명령이다.
traceroute [Host_name or IP_Address]
설명 : www.naver.com은 멀티 IP 주소를 사용한다는 메시지로 먼저 알려준다. 7번째까지는 잘 찾아갔지만 8번째부터는 방화벽에 의해 차단된 정보라고 ‘*’표시로 나타나고 있다.
nslookup
nslookup 도메인의 정보를 조회하는 명령이다.
nslookup [옵션] [hostname 또는 도메인]
실제 사용법
$ nslookup www.naver.com
설명 : 현재 서버의 DNS 이름과 IP 출력과 함께 사이트의 정보도 함께 출력한다.
$ nslookup -type=mx naver.com
설명 : mx(메일설정관련)에 대한 정보도 출력한다.
$ nslookup
설명 : 현재 서버의 DNS 이름과 IP를 출력하고, 대화형 모드로 실행한다.
nslookup의 대화형모드
nslookup 명령만 내리면 '>'와 함께 대화형 모드로 접속한다. 조회 후 exit를 치면 빠져나온다.
설명 : 대화형 모드에서는 일반 nslookup 도메인값으로 검색하는 것과 동일하다. 하지만 환경설정을 변화하면 변화시zu 환경 설정값에 의존하여 그 결과값을 뿌fu준다. 위의 예처럼 set type=mx 설정으로 특정 도메인의 메일 서버를 확인할 수 있다. exit 명령어로 nslookup 대화형모드를 중단한다.
dig
도메인명(FQDN:Fully Qualified Domain Name)으로 정보를 알아볼 수 있는 명령이다. nslookup보다 좀 더 정확한 결과를 확인할 수 있다.
$ dig 도메인명 [type]
설명 : [type] 에는 MX, A, ANY 등 DNS설정에 사용하는 값을 지정할 수 있다.
실제 사용의 예
설명 : 메일서버 세팅인 MX 설정관련 부분만 보여준다.