Handbook:PPC64/Networking/Advanced/ko
고급 설정
config_eth0 변수는 인터페이스 설정의 핵심입니다. 인터페이스(eth0) 설정의 하이 레벨 명령 모음입니다. 명령 목록의 각 명령은 순서대로 처리합니다. 인터페이스는 최소한 명령 한개가 동작하면 문제가 없는걸로 간주합니다.
내부 명령 목록은 아래와 같습니다:
명령 | 설명 |
---|---|
null
|
아무것도 안함 |
noop
|
인터페이스가 동작하고 있고 주소를 부여했다면 설정을 온전하게 멈춥니다 |
IPv4 또는 IPv6 주소 | 인터페이스에 주소를 추가합니다 |
dhcp , adsl , apipa (또는 3자 회사 개별 명령)
|
제공 명령을 모듈에서 실행합니다. dhcp 명령은 dhcpcd, dhclient, pump 중 모듈 하나를 실행합니다.
|
명령 처리에 실패하면, 대체 값을 정의합니다. 대체 값은 설정 구조와 정확하게 일치합니다.
이 값을 한데 묶을 수도 있습니다. 실제 사용하는 예제는 다음과 같습니다.
# Adding three IPv4 addresses
config_eth0="192.168.0.2/24
192.168.0.3/24
192.168.0.4/24"
# Adding an IPv4 address and two IPv6 addresses
config_eth0="192.168.0.2/24
4321:0:1:2:3:4:567:89ab
4321:0:1:2:3:4:567:89ac"
# Keep our kernel assigned address, unless the interface goes
# down so assign another via DHCP. If DHCP fails then add a
# static address determined by APIPA
config_eth0="noop
dhcp"
fallback_eth0="null
apipa"
ifconfig
모듈을 사용중이며 하나 이상의 주소를 추가한다면 추가 주소에 대해 인터페이스 별명을 만듭니다. 따라서 위의 두가지 예제를 통해 eth0, eth0:1, eth0:2 인터페이스가 나타납니다. 이 인터페이스에 대해서는 커널처럼 특별한 무언가를 처리할 수 없으며 다른 프로그램에서는 eth0:1과 eth0:2를 eth0처럼 다룹니다.대체 방식의 순서가 중요합니다! null 옵션을 지정하지 않으면
noop
명령이 실패했을 때만 apipa
명령을 실행합니다.APIPA와 DHCP는 나중에 다룹니다.
네트워크 의존성
/etc/init.d/의 초기화 스크립트는 특정 네트워크 인터페이스 또는 "net"에 의존할 수 있습니다. 젠투 init 시스템의 모든 네트워크 인터페이스를 "net"이라고 합니다.
/etc/rc.conf에서 rc_depent_strict 변수를 YES
로 설정하면, "net"으로 제공하는 모든 네트워크 인터페이스는 "반드시" "net"에 의존하는 조건을 만나기 전에 활성화해야합니다. 다시 말해 시스템에 net.eth0과 net.eth1, "net"에 의존하는 초기화 스크립트가 있다면 net.eth0과 net.eth1을 활성화해야합니다.
반면에 rc_depend_strict="NO"
설정 값이 있다면, 최소한 하나의 네트워크 인터페이스를 띄웠을 때 "net" 의존성을 해결한 것으로 봅니다.
그러나 net.eth0과 net.eth1에 의존하는 net.br0는 어떨까요? net.eth1은 브릿지에 추가할 수 있기 전에 설정이 필필요한 무선 네트워크 또는 PPP 장치일 수도 있습니다. net.lo로 연결하는 심볼릭 링크이기 때문에 /etc/init.d/net.br0에선 처리가 불가능합니다.
/etc/conf.d/net의 rc_need_ 설정을 지정하는 것이 해결책이 될 수 있습니다:
rc_need_br0="net.eth0 net.eth1"
그러나 위의 절차를 따르는 것으로는 충분하지 않습니다. 젠투 네트워크 초기화 스크립트는 네트워크를 사용할 수 있을때 시스템에 알려주는 "net" 가상 의존성을 사용합니다. 분명하게 발하자면, 위와 같은 경우 다른 인터페이스를 띄울때가 아니라, net.br0을 띄웠을 때 네트워크를 사용할 수 있는 상태로 나타나야합니다. 따라서 /etc/conf.d/net 에 다음과 같이 알려야합니다:
rc_net_lo_provide="!net"
rc_net_eth0_provide="!net"
rc_net_eth1_provide="!net"
의존성에 대해 언급한 더 자세한 이야기는 젠투 핸드북의 초기화 스크립트(Initscript) 관련 절을 참고하십시오. /etc/rc.conf에 대한 더 많은 내용은 파일 자체에 적어놓은 주석에 있습니다.
변수 이름 및 값
변수 이름은 언제든 바뀝니다. 보통 variable_${interface|mac|essid|apmac}
의 구조를 따릅니다. dhcpcd_eth0 변수는 eth0의 dhdpcd 옵션 값을 가지고 있으며, dhcpcd_essid 변수는 essid ESSID로 연결할 때의 dhcpcd 옵션 값을 가지고 있습니다.
그러나 이름이 ethx여야 하는 인터페이스에 대한 규칙이 어렵거나 고정된것은 아닙니다. 사실 대부분의 무선 네트워크 인터페이스에는 wlanx, rax, ethx와 같은 이름이 붙으며, 브릿지 같은 사용자 지정 인터페이스에도 어떤 이름이든 붙을 수 있습니다. 좀 더 즐기는 인생을 만들려 한다면 무슨 액세스 포인트에 알파벳-숫자를 써서 이름을 붙일 수 있습니다. 사용자는 ESSID로 네트워크 매개 변수를 설정할 수 있기 때문에 이 점은 중요합니다.
이러한 모든 사실의 바탕은 젠투가 네트워크 설정에 사용하는 배시 변수입니다 - 그리고 배시는 영문자 숫자 외에는 사용할 수 없습니다. 이러한 제약을 극복하기 위해 영문자 숫자가 아닌 문자를 _ (밑줄) 문자로 바꿉니다.
배시에서의 또 다른 동작의 바탕은 변수 내용입니다 - 일부 문자는 이스케이프 처리를 해야 합니다. 이스케이프 할 문자 앞에 \ (백슬래시) 문자를 붙이면 됩니다. ", ', \. 문자는 언급한 방식으로 이스케이프 처리를 해야합니다.
이 예제에서 좀 더 넓은 범위의 문자를 넣을 수 있는 만큼의 무선 네트워크 ESSID를 지정해보겠습니다. My "\ NET ESSID를 사용하겠습니다:
# This does work, but the domain is invalid
dns_domain_My____NET="My \"\\ NET"
위 예제에서는 무선 네트워크 카드로 My "\ NET ESSID를 가진 AP에 연결하면 My "\ NET에 DNS 도메인을 설정합니다.
네트워크 인터페이스 이름 부여
동작 방법
네트워크 인터페이스 이름은 순차적으로 부여하지 않습니다. 리눅스 커널과 장치 관리자(다른 장치 관리자도 있지만 대부분의 시스템에서는 udev를 장치 관리자로 지니고 있음)는 고정 규칙을 기반으로 인터페이스 이름을 선택합니다.
인터페이스 카드를 시스템에서 발견하면, 리눅스 커널에서는 이 카드에 대해 필요한 데이터를 가져옵니다. 가져오는 데이터에는 다음 내용이 들어있습니다:
- ID_NET_NAME_ONBOARD 매개변수로 볼 네트워크 카드의 내장(인터페이스 자체) 등록 이름
- ID_NET_NAME_SLOT 매개변수로 볼 수 있는 네트워크 카드가 붙은 슬롯
- ID_NET_NAME_PATH 매개변수로 볼 수 있는, 접근 가능 네트워크 카드 장치 경로
- ID_NET_NAME_MAC 매개변수로 볼 수 있는 카드의 (제조사 제공) MAC 주소
이 정보를 기반으로 장치관리자에서는 시스템의 인터페이스 이름을 어떻게 부여할지 결정합니다. 기본적으로 위에 언급한 세가지 매개변수(ID_NET_NAME_ONBOARD, _SLOT 또는 _PATH)중 첫번째로 만나는 항목을 사용합니다. ID_NET_NAME_ONBOARD를 찾고 eno1
으로 설정하면, 인터페이스는 eno1이 됩니다.
udevadm를 사용하면 활성 인터페이스의 이름으로 제공 매개변수의 값을 확인할 수 있습니다:
root #
udevadm test-builtin net_id /sys/class/net/enp3s0 2>/dev/null
ID_NET_NAME_MAC=enxc80aa9429d76 ID_OUI_FROM_DATABASE=Quanta Computer Inc. ID_NET_NAME_PATH=enp3s0
ID_NET_NAME_PATH 매개 변수 값이 최상위 3개 매개변수중 제일 처음(실제로도)에 위치했으므로, 이 값을 인터페이스 이름으로 사용합니다. 매개변수값이 없으면, 시스템에서는 커널에서 제공하는 이름으로 되돌립니다.
구식 커널 이름 사용
설정을 바꾸기 전에 네트워크 인터페이스 커널은 리눅스 커널에서 드라이버를 불러온 순서에 따라 자체적으로 이름을 부여합니다(다른 경우는 알 수 없는 이유 때문일 수도 있음). 이 동작은 부트로더에서 net.ifnames=0
부팅 옵션을 설정하여 활성화할 수 있습니다.
개별 이름 사용
이름 부여 방식을 바꾸기 이전의 모든 아이디어는 햇갈릴 일이 없겠지만 이름을 바꾸는 것 자체는 쉽습니다. 시스템에 eth0과 eth1 인터페이스 두개를 달았다고 치겠습니다. 하나는 무선으로 네트워크에 연결하며, 다른 하나는 무선 네트워크 접근 방식으로 연결합니다. 이런 인터페이스 이름 부여 방식에 대해 lan0(유선)과 wifi0(무선 - eth*과 wlan*같이 충돌할 가능성이 흔히 사용하는 이름을 제안 이름 부여 방식으로 피하는게 좋음)으로 바꿀 수 있습니다.
카드에 해당하는 매개 변수를 찾아보시고 개별 자체 이름 규칙에 이 정보로 설정하십시오:
root #
udevadm test-builtin net_id /sys/class/net/eth0 2>/dev/null
ID_NET_NAME_MAC=enxc80aa9429d76 ID_OUI_FROM_DATABASE=Quanta Computer Inc.
root #
vim /etc/udev/rules.d/70-net-name-use-custom.rules
# First one uses MAC information, and 70- number to be before other net rules SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="c8:0a:a9:42:9d:76", NAME="lan0"
root #
vim /etc/udev/rules.d/76-net-name-use-custom.rules
# Second one uses ID_NET_NAME_PATH information, and 76- number to be between # 75-net-*.rules and 80-net-*.rules SUBSYSTEM=="net", ACTION=="add", ENV{ID_NET_NAME_PATH}=="enp3s0", NAME="wifi0"
기본 규칙 이전에(철자순으로 규칙을 처리하므로 70을 80보다 먼저 처리) 처리하는 규칙이 있으므로 규칙 파일에서 제공한 이름을 기본 이름대신 사용합니다. 파일에 부여한 숫자는 76번과 79번 사이여야합니다(환경 변수는 75번부터 시작하며 대체 이름은 80번에서 끝납니다).