반응형
출처 :http://cafe.naver.com/armwl/143

출처 : http://servermaster.pe.kr/tt/23 , http://www.urinuri.net/100

출처 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/System_management/dhcpClient


ifconfig 를 이용해서 네트워크장치 eth0 장치 활성화

dhclient 는 DHCP 를 이용해서 네트웍 설정을 자동으로 하는 프로그램 입니다.

DHCP를 이용해서 네트웍 설정을 자동으로 할려면
DHCP서버가 필요할데 대부분의 IP공유기는 이것을 가지고 있고
인터넷 제공 업체들도 운영하고 있습니다.

ifconfig 는 네트웍 인터페이스를 직접 수동으로 설정할 수 있는 툴이고
ifconfig eth0 up 은 이미 설정되어 있는 인터페이스 eth0 를 활성화 하고 있습니다.
만약 IP설정이 정확하게 되어 있지 않다면 IP는 없는 상태로 활성화 될것입니다.
# ifconfig eth0 192.168.123.2 netmask 255.255.255.0 up
정도로 한다면 IP설정이  192.168.123.2번으로 설정 될것입니다.

그런데 이렇게만 한다면 외부로 나갈수는 없고 내부네트웍에서만 동작이 가능 합니다.
그래서 default gateway 가 필요한데 그것을 설정하는 툴이 route 입니다.
# route add default gw 192.168.123.1
과 같은 형식으로 지정 할수 있으면 이렇게 지정 하게되면 외부로 인터넷 접속을 할 수 있습니다.

이런 일련의 과정들이 복잡하고 192.168.xxx.xxx 같은 IP주소를 네트웍 관리자로부터 확인도 해야 되며
또 네트웍 관리자가 일일이 알려주기도 쉽지 않습니다.
그래서 생겨난것이 DHCP(Dynamic Host Configuration Protocol)이며
이것에 의해서 위의 ifconfig, route 등등의 작업을 자동으로 할수 있습니다.
그 작업을 하는것에 dhclient 입니다.

리눅스에서는 일반적으로 dhclient 를 직접 호출하지는 않고 별도의 설정파일을 두고
그 설정값에 따라서 자동으로 dhclient 를 호출 하던지 ifnconfig를 호출 하던지 하는 형식으로 처리 합니다.
대부분 ifup, ifdown 이 그 일을 담당 합니다.
우분투의 경우는 /etc/network/intefaces 가 그 설정 파일이고
레드헷계열은 /etc/syscofig/networ-scripts/ifcfg-eth0 등의 파일 입니다.


우분투 서버 and 데스크탑 모두 해당되는 사항입니다.

데스크탑의 경우는 GUI 환경이라 간편하게 설정을 할 수 있습니다만, 서버의 경우는 콘솔이나 터미널 상에서 설정을 해야 합니다...

우분투를 설치하게되면 보통 dhcp로 자동으로 ip가 할당이 되게 되어 있습니다.
이것을 수동으로 잡아보도록 하겠습니다.

주의) 아래 네트워크 정보는 사용자 마다 다를 수 있습니다. vmware 환경에서 설정한 사항입니다.

우선 현재 네트워크 사항입니다. (dhcp로 할당된 ip 정보)
장치명 : eth1
ip : 192.168.32.131
netmask : 255.255.255.0
gateway : 192.168.32.2

위의 사항에서 ip 주소만 변경하여 보겠습니다. (고정 ip로 변경)
변경할 ip : 192.168.32.132


1. 현재 네트워크 사항을 확인해 봅니다.
windpyj@ubuntu:~$ ifconfig eth1
eth1      Link encap:Ethernet  HWaddr 00:0C:29:0F:88:75
          inet addr:192.168.32.131  Bcast:192.168.32.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe0f:8875/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:296 errors:0 dropped:0 overruns:0 frame:0
          TX packets:404 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:32183 (31.4 KiB)  TX bytes:35425 (34.5 KiB)
          Interrupt:185 Base address:0x1400
windpyj@ubuntu:~$


2. ip 변경을 위해 /etc/networking/interfaces 파일을 엽니다.
windpyj@ubuntu:~$ sudo vi /etc/networking/interfaces


# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth1
iface eth1 inet dhcp # 여기 설정에 보시면 eth1 장치를 dhcp로 ip가 할당되게끔 되어 있습니다. 이부분을 변경하면 됩니다.


3. ip 주소를 변경하기위해 다음과 같이 세팅을 하여 봅니다.
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth1
# iface eth1 inet dhcp # 기존 설정은 주석 처리 하였습니다, 다음 파란색 부분 처럼 세팅하시면 됩니다.
iface eth1 inet static
        address 192.168.32.132
        netmask 255.255.255.0
        network 192.168.32.0
        broadcast 192.168.32.255
        gateway 192.168.32.2


4. 세팅이 완료되었다면 저장하고 데몬을 재시작 하여 줍니다.
windpyj@ubuntu:~$ sudo /etc/init.d/networking restart


5. 데몬이 재시작되면 콘솔에서 접속하신 분들은 상관이 없지만 터미널로 접속하신 분들은 터미널 연결이 끊기게 됩니다. ip 주소를 변경해서 그렇겠죠?
그럼 터미널에서 변경한 ip 주소로 다시 접속하면 됩니다.


6. 재접속 후 ip주소를 확인해 봅니다.
확인해 보면 ip주소가 192.168.32.131 에서 192.168.32.132로 변경된 것을 확인 할 수 있습니다.
windpyj@ubuntu:~$ ifconfig eth1
eth1      Link encap:Ethernet  HWaddr 00:0C:29:0F:88:75
          inet addr:192.168.32.132  Bcast:192.168.32.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe0f:8875/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1019 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1404 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:108881 (106.3 KiB)  TX bytes:118314 (115.5 KiB)
          Interrupt:185 Base address:0x1400
windpyj@ubuntu:~$



한 랜카드에 다중 IP지정은 다음과 같이 추가한다.

auto eth0:1
iface eth0:1 inet static
address 192.168.1.60
netmask 255.255.255.0
network x.x.x.x
broadcast x.x.x.x
gateway x.x.x.x

우분투 호스트 명은 다음과 같이 변경할 수 있다.

sudo /bin/hostname newname

수동 변경은 /etc/hostname파일을 수정해 준다.

DNS 주소 설정은 /etc/resolv.conf 파일을 수정한다. 형식은 다음과 같다.

nameserver 168.126.63.1
nameserver 168.126.63.2




1 dhcp client 설정

dhcp는 L7 프로토콜이다. 운영체제의 네트워크 설정을 위해서 dhcp를 사용하기로 했다면, 운영체가 올라오면서 dhcp client를 실행한다. dhcp client는 dhcp 요청을 해당 서브네트워크에 브로드캐스팅을 한다. 만약 브로드캐스팅 영역에 dhcp 서버가 올라와 있다면, dhcp 서버가 요청을 받아서 응답을 전송할 것이다.

dhcp로 설정할 수 있는 것들은 다음과 같다.
  1. IP Address : client pc의 IP 주소
  2. BOOTP 정보
  3. subnet mask
  4. router : default gateway
  5. IP lease time : IP 유효시간
  6. DNS : dns 서버 주소
이 정보들은 dhcp 서버 설정파일에서 찾을 수 있다.

이제 dhcp client 측에서 이 정보들을 이용하기 위해서 어떤 파일들을 수정해야 하는지 알아볼 것이다. 리눅스 운영체제 마다 약간씩 차이가 있는데, 우분투 리눅스와 CentOS를 대상으로 정했다.

1.1 일반적인 네트워크 설정

일반적인 네트워크 설정 방법은 네트워크 설정문서를 참고한다.

1.2 Ubuntu

  • 운영체제 버전 : Ubuntu Linux 12.04
  • dhcp client 버전 : isc-dhclient-4.1-ESV-R4
네트워크 인터페이스 설정파일은 /etc/network/interfaces 다. 설정은 다음과 같다.
auto lo
iface lo inet loopback

## static network 설정
iface eth0 inet static 
address 192.168.57.99 
netmask 255.255.255.0
gateway 102.168.57.1

## dhcp 설정
auto eth1
iface eth1 inet dhcp

1.2.1 host name 설정

이제 운영체제가 올라오면 dhcp client가 실행 되고, 자신이 속해 있는 subnet에 dhcp 요청을 브로드캐스팅한후 응답을 받아서 그대로 적용하면 그걸로 끝이다. 간단하다.

dhcp의 일차 용도는 관리 네트워크에 접속하려는 노드가 쉽게 네트워크 환경을 설정을 할 수 있도록 도와주기 위함이다. 또 다른 용도는 내부 네트워크 자원을 관리하기 위함이다. 이 경우 할당할 ip range에서 남는 ip를 선택해서 할당하는 방식 대신 MAC을 검사해서 ip를 할당하는 방식을 사용할 것이다. host name도 함께 관리할 것이다.

다른 네트워크 정보는 더 이상 손볼게 없는데 host name(이하 호스트 이름)쪽은 좀 봐야 한다.

기본적으로 호스트 이름은 운영체제 설정을 따르기 때문에, 운영체제의 호스트 이름 설정하는 부분에 대한 수정이 필요하다. /etc/hostname 과 /etc/hosts다.

예를 들어 dhcp server에서 호스트 이름을 node01.yundream.com 으로 설정했다면, 예컨데 설정이 아래와 같다면
## ... 생략
host ubuntu {
        option host-name "node01.yundream.com";
        hardware ethernet 08:00:27:21:6f:cc;
        fixed-address 192.168.57.10;
}
## ... 생략

네트워크 설정이 적용되는 "타겟 호스트"의 hostname과 hosts를 변경해야 한다. 이건 파일을 수정하는 작업이기 때문에, 각 파일을 수정하는 스크립트를 만들어야 한다. dhcp client는 네트워크 설정이 적용된 후에 실행될 스크립트 파일을 설치할 수 있다.

스크립트의 위치는 /etc/dhcp/dhclient-exit-hooks.d가 되겠다. 나는 아래와 같은 스크립트를 만들었다.
# cat hostname 
#!/bin/bash

# $reson : dhcp client의 종료 상태정보를 가지고 있다. BOUND는 새로운 주소로 설정됐음을 의미한다.
# new_host_name 변수가 설정돼 있는지 검사한다. new_host_name 변수는 호스트 이름을 가지고 있다. 
# /etc/hostname.lock 파일이 있는지 검사한다. 이 파일은 hostname을 변경할지를 검사하기 위해서 사용한다. 
# 현재 hostname 과 $new_host_name을 비교하는 방법도 있을 것이다. 
if [ "$reason" == BOUND ] && [ -v new_host_name ] && [ ! -e /etc/hostname.lock ]
then
        echo $new_host_name > /etc/hostname
        echo $new_host_name > /etc/hostname.lock
        echo "127.0.0.1" $new_host_name > /tmp/hosts
        cat /etc/hosts >> /tmp/hosts
        cp -f /tmp/hosts /etc/hosts 
fi

1.3 CentOS

/etc/sysconfig/network-scripts 밑에 인터페이스 별로 설정파일이 위치한다. 개인적으로 centos의 설정관리법이 맘에 든다. ifcfg-eth0 의 내용은 다음과 같다.
[root@centos network-scripts]# cat ifcfg-eth0 
DEVICE="eth0"
BOOTPROTO="dhcp"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="a7989039-b913-4456-9f90-b378bc9bcc2c"
BOOTPROTO를 dhcp로 하면 된다.

Ubuntu 리눅스에서와 마찬가지로 hostname을 변경하려면, 스크립트를 만들어야 한다. 다행히 우분투 리눅스와 완전히 동일하다.

2 dhcp와 resolv.conf

CentOS, Ubuntu 모두 /etc/resolv.conf에 도메인 서버를 등록할 수 있다.

2.1 dhcp로 부터 dns name server 설정하기

CentOS와 Ubuntu 모두 별다른 설정을 하지 않으면, dhcp server가 전달해준 dns server 값으로 /etc/resolv.conf 를 만든다. /etc/resolv.conf가 이미 있다면, 덮어써 버린다.

2.2 dns name server 변경을 허용하지 않기

dhcp client가 알아서 /etc/resolv.conf를 수정해주면 편하긴 하지만, 때로 문제가 될 수도 있다. 개발이나 시스템 관리등의 이유로 resolv.conf를 수정해서 사용해야 할 때가 있는데, dhcp client가 재 시작할 때 마다 resolv.conf를 덮어써 버리기 때문이다.

/etc/resolv.conf를 보호하는 방법을 살펴보자.

2.2.1 chattr 이용하기

가장 간단한 방법이다. chattr을 이용하면 파일의 속성을 변경할 수 있는데, -i 옵션을 이용해서 "수정불가"로 만들 수 있다. 아래와 같이 하면 된다.
# chattr +i /etc/resolv.conf
"-i" 옵션으로 수정가능하게 만들 수 있다.

리눅스 파일시스템에서 지원하는 기능이기 때문에 간단하게 사용할 수 있는데, chef 등에서 사용 할 때 사소한 문제가 있다. 왠일인지 chef에서 bash resource로 chattr을 실행했는데, -i 속성이 먹히지(+i 속성은 먹힌다) 않는다.

2.2.2 네트워크 설정 파일 수정

CentOS의 경우 네트워크 스크립트파일을 수정해서 resolv.conf 파일을 보호할 수 있다.
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eht0
BOOTPROTO=dhcp
ONBOOT=yes
PEERDNS=no
PEERDNS
  • yes : dhcp client가 /etc/resolv.conf를 수정하도록 허용한다.
  • no : /etc/resolv.conf를 수정하지 못하게 한다. 

------------------------------------------------------------------------------------------------------------------------------------------

/rootfs/stage/etc/network/interfaces

# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

 

# The loopback interface

auto lo

iface lo inet loopback


# Wireless interfaces

iface wlan0 inet dhcp

wireless_mode managed

wireless_essid any

wpa-driver wext

wpa-conf /etc/wpa_supplicant.conf


iface atml0 inet dhcp


# Wired or wireless interfaces

auto eth0

iface eth0 inet dhcp

iface eth1 inet dhcp


# Ethernet/RNDIS gadget (g_ether)

# ... or on host side, usbnet and random hwaddr

iface usb0 inet static

address 192.168.7.2

netmask 255.255.255.0

network 192.168.7.0

gateway 192.168.7.1


# Bluetooth networking

iface bnep0 inet dhcp

반응형

'Linux > Linux 일반' 카테고리의 다른 글

리눅스 하드웨어 사양보기  (0) 2009.02.14
우분투 8.10 에서 프레임 버퍼 띄우기  (0) 2009.02.08
frame buffer 이야기  (0) 2009.02.07
Posted by Real_G