젠투 리눅스 핸드북: 네트워크 설정
The following networking portion of the handbook describes 'advanced' network configuration for systems running the OpenRC init system utilizing netifrc as the network management system.
For systems running systemd, readers should review see the networking portion of the systemd article.
시작하기
이 네트워크 안내서는 사용자가 시스템을 올바르게 설정했으며, 네트워크 인터페이스 이름을 이미 확인했음을 가정합니다. 네트워크 인터페이스 이름은 시스템에 네트워크 카드가 붙은 버스 위치에 기반하여 만듭니다. 이 때분에 인터페이스 이름이 eno0, ens1, wlan0, enp1s0 등 여러가지 방식으로 바뀔 수 있습니다. 각 시스템에는 약간 다른 인터페이스 이름이 달려있습니다. 다음에서는 앞서 언급한 어떤 이름으로 동작하는 상황을 무시하고, 그냥 인터페이스 이름을 eth0으로 설정했다고 가정합니다.
네트워크 카드 설정을 시작하려면, 젠투 RC 시스템에 알려야합니다. /etc/init.d의 net.lo에 대해 net.eth0(또는 시스템에 있는 네트워크 인터페이스 이름) 심볼릭 링크를 만들어 처리합니다.
root #
cd /etc/init.d
root #
ln -s net.lo net.eth0
젠투 RC 시스템은 이제 인터페이스를 알아냈습니다. 또한 새 인터페이스를 설설정하는 방법을 알려줄 필요가 있습니다. 모든 네트워크 인터페이스는 /etc/conf.d/net 파일에서 설정합니다. 아래에 DHCP와 정적 주소에 대한 설정예제를 두었습니다.
# For DHCP
config_eth0="dhcp"
# For static IP using CIDR notation
config_eth0="192.168.0.7/24"
routes_eth0="default via 192.168.0.1"
dns_servers_eth0="192.168.0.1 8.8.8.8"
# For static IP using netmask notation
config_eth0="192.168.0.7 netmask 255.255.255.0"
routes_eth0="default via 192.168.0.1"
dns_servers_eth0="192.168.0.1 8.8.8.8"
인터페이스 설정을 참고할 수 없다면 DHCP를 고려하십시오.
CIDR은 Classless InterDomain Routing을 의미합니다. 초기에 IPv4 주소를 A, B, C로 구분했습니다. 이전 분류 체계에서는 인터넷의 거대한 인구 확장을 반영하지 못했으며, 새 유일 주소의 고갈 위험에 직면했습니다. CIDR은 수많은 IP 주소를 하나의 IP 주소로 표기하는 주소 표기 기법입니다. 192.168.0.0/16처럼 슬래시와 숫자가 붙는다는 점을 제외하면 CIDR IP 주소는 일반 IP 주소와 흡사합니다. CIDR은 RFC1519에 설명합니다.
인터페이스를 설정했습니다. 이제 다음 명령으로 시작하고 중지할 수 있습니다:
root #
/etc/init.d/net.eth0 start
root #
/etc/init.d/net.eth0 stop
네트워크에 문제가 있다면 /var/log/rc.log 파일을 살펴보십시오. /etc/rc.conf에서 rc_logger 변수를
NO
라고 설정하기 전까지는, 부팅 활동 정보를 해당 로그 파일에 저장합니다.이제 네트워크 인터페이스를 성공적으로 멈추고 시작했습니다. 다음 단계는 젠투를 부팅할 때 인터페이스를 시작하게 하는 조치입니다. 이 아래에 방법을 적어놓았습니다:
root #
rc-update add net.eth0 default
root #
rc
마지막 rc 명령은 젠투에게 현재 실행 레벨에서 아직 시작하지 않은 스크립트를 실행하라고 지시합니다.
고급 설정
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번에서 끝납니다).
네트워크 모듈
netifrc 스크립트는 모듈러 네트워크 스크립트를 지원하며, 기존 모듈과의 호환성을 유지하면서 새 인터페이스 형식과 설정 모듈을 쉽게 추가할 수 있음을 의미합니다.
모듈이 필요한 꾸러미를 설치했다면 모듈에서 기본적으로 불러옵니다. 설치한 꾸러미에서 지정하지 않은 모듈을 사용자가 지정하면 설치해야 할 꾸러미를 나타내면서 오류를 표시합니다. 모듈 설정은 동일한 서비스를 지닌 둘 이상의 꾸러미를 설치했을 때만 사용하며, 설치한 꾸러미 중 하나를 선호해야합니다.
특별히 다른 부분을 지정하지 않는 이상 여기서 언급하는 모든 설정은 /etc/conf.d/net에 저장합니다.
# Prefer ifconfig over iproute2
modules="ifconfig"
# You can also specify other modules for an interface
# In this case we prefer pump over dhcpcd
modules_eth0="pump"
# You can also specify which modules not to use - for example you may be
# using a supplicant or linux-wlan-ng to control wireless configuration but
# you still want to configure network settings per ESSID associated with.
modules="!iwconfig"
인터페이스 핸들러
현재 인터페이스 처리 프로그램을 두가지로 제공하고 있으며, 하나는 ifconfig, 다른 하나는 iproute2입니다. 어떤 네트워크 설정을 진행하든 둘 중 하나만 필요합니다.
두가지 경우 시스템 프로파일의 기본 요소로 설치합니다. iproute2는 더욱 강력하고 유연한 꾸러미입니다.
ifconfig와 iproute2 둘 다 매우 비슷하기에 두 프로그램에서 모두 동작하는 기본 설정을 허용하겠습니다. 아래 두 코드는 사용자가 어떤 모듈을 쓰든지간에 상관 없이 동작합니다.
config_eth0="192.168.0.2/24"
config_eth0="192.168.0.2 netmask 255.255.255.0"
# We can also specify broadcast
config_eth0="192.168.0.2/24 brd 192.168.0.255"
config_eth0="192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255"
DHCP
DHCP란 네트워크 주소 정보(IP 주소, DNS 서버, 게이트웨이 등)를 DHCP 서버에서 가져옴을 뜻합니다. 네트워크 상에 동작하는 DHCP 서버가 있다면 사용자는 DHCP를 사용하겠다고 각 클라이언트에서 알리고 네트워크를 자체적으로 설정합니다. 물론 사용자는 DHCP를 사용할 수 있기 전에 무선 네트워크, PPP 등 필요한 모든 수단에서 설정해야 합니다.
DHCP는 dhclient, dhcpcd, pump에서 제공합니다. 각각의 DHCP 모듈에는 장단점이 있습니다. 간단하게 내용 진행하고 넘어가겠습니다.
DHCP 모듈 | 꾸러미 | 장점 | 단점 |
---|---|---|---|
dhclient | net-misc/dhcp | BIND DNS 프로그램을 만든 ISC에서 만들었습니다. 상당히 설정편의성이 뛰어납니다 | 전반적으로 설정이 복잡하며, 프로그램이 필요이상 크고 DHCP에서 NTP 서버를 가져올수 없으며, 기본 성정상으론 호스트 이름을 보내지 못합니다 |
dhcpcd | net-misc/dhcpcd | 오랫동안 젠투 기본 프로그램이며, 외부 도구에 의존하지 않고, 젠투에서 현재도 개발 중입니다 | 가끔은 느려질 수 있으며 IP 대여 시간이 한없이 지속되면 데몬 동작이 안됩니다 |
pump | net-misc/pump | 가벼우며, 외부 도구에 의존하지 않습니다. | 업스트림에서 더이상 관리하지 않아 신뢰성이 없으며, 특히 모뎀을 통해서는 DHCP에서 NIS 서버를 가져올 수 없습니다 |
하나 이상의 DHCP 클라이언트를 설치했다면 어떤 클라이언트를 사용할지 지정하십시오. 그렇지 않으면 dhcpcd가 있다고 할 경우 dhcpcd를 기본으로 사용합니다.
DHCP 모듈로 지정 돕션을 보내려면 module_eth0="..."
옵션을 사용하십시오(사용할 DHCP 모듈로 모듈을 바꿈 - 예: dhcpcd_eth0).
DHCP를 어떤 식으로든 쓸 수 있게 해보겠습니다. dhcp_eth0 변수를 사용하여 다음 명령을 지원합니다. 기본값은 다음 어떤 명령도 설정하지 않습니다:
release
- 재사용할 IP 주소를 릴리스
nodns
- /etc/resolv.conf에 덮어쓰기 안함
nontp
- /etc/ntp.conf에 덮어쓰기 안함
nonis
- /etc/yp.conf에 덮어쓰기 안함
# Only needed if you have more than one DHCP module installed
modules="dhcpcd"
config_eth0="dhcp"
dhcpcd_eth0="-t 10" # Timeout after 10 seconds
dhcp_eth0="release nodns nontp nonis" # Only get an address
dhcpcd와 pump에서는 기본적으로 현재 호스트 이름을 DHCP서버로 보내므로 별도로 지정할 필요가 없습니다.
# Only needed if more than one DHCP module is installed
modules="dhclient"
config_eth0="dhcpv6"
# To use both DHCPv4 and DHCPv6 on a dual-stack network, remove the above line and uncomment the following lines
#config_eth0="dhcp
#dhcpv6"
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
# To pass runtime arguments to dhclient for DHCPv6
dhclientv6_eth0="-t 10" # Timeout after 10 seconds
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
# Set generic DHCPv6 options
dhcpv6_eth0="release nodns nontp nonis nogateway nosendhost"
PPPoE/PPPoA로 ADSL 연결
우선 ADSL 프로그램을 설치하겠습니다:
root #
emerge --ask net-dialup/ppp
그 다음 PPP net 스크립트를 만들고 PPP에서 사용할 이더넷 인터페이스용 net 스크립트도 만드십시오:
root #
ln -s /etc/init.d/net.lo /etc/init.d/net.ppp0
root #
ln -s /etc/init.d/net.lo /etc/init.d/net.eth0
/etc/rc.conf 에서 rc_depend_strict를 YES
로 설정했는지 확인하십시오.
이제 /etc/conf.d/net을 설정해야합니다.
config_eth0=null (이더넷 인터페이스 명시)
config_ppp0="ppp"
link_ppp0="eth0" (이더넷 인터페이스 명시)
plugins_ppp0="pppoe"
username_ppp0='user'
password_ppp0='password'
pppd_ppp0="
noauth
defaultroute
usepeerdns
holdoff 3
child-timeout 60
lcp-echo-interval 15
lcp-echo-failure 3
noaccomp noccp nobsdcomp nodeflate nopcomp novj novjccomp"
rc_need_ppp0="net.eth0"
/etc/ppp/pap-secrets에 암호를 설정할 수도 있습니다.
# The * is important
"username" * "password"
USB 모뎀에 PPPoE를 사용한다면 br2648ctl을 이머지했는지 확인하십시오. 올바르게 설정하는 방법은 /net-dialup/speedtouch-usb/files/README를 읽어보십시오.
/usr/share/doc/netifrc-*/net.example.bz2의 ADSL and PPP절을 주의깊게 읽어보십시오. 필요할지도 모르는 PPP 설정의 각 모든 부분의 자세한 설명이 들어있습니다.
APIPA(자동 개인 IP 주소 지정)
APIPA는 인터페이스의 임의 주소 범위에서 ARP를 수행하여 169.254.0.0-169.254.255.255 범위에서 사용할 수 있는 주소를 찾습니다. 응답이 없으면 인터페이스에 주소를 할당합니다.
This is only useful for LANs where:
- there is no DHCP server;
- the system doesn't connect directly to the Internet; and
- all other computers use APIPA.
APIPA 지원 기능을 활용하려면, arping
USE 플래그를 설정한 후 net-misc/iputils를 이머지하거나 net-analyzer/arping을 이머지하십시오.
# Try DHCP first - if that fails then fallback to APIPA
config_eth0="dhcp"
fallback_eth0="apipa"
# Just use APIPA
config_eth0="apipa"
본딩
본딩은 네트워크 대역폭을 늘리거나 하드웨어 문제에 직면했을 때 탄력적 복구기능을 개선하는 용도로 사용합니다. 시스템에 동일한 네트워크에 연결한 두 네트워크 카드가 붙어있다면 관리자는 이들을 본딩하여 프로그램이 하나의 인터페이스로 간주하여 쓸 수 있습니다만, 이 경우 실제로는 두 네트워크 카드를 다 사용합니다.
본딩을 설정하는 방법은 여러가지가 있습니다. 이 중에서 802.3ad LACP 모드 같은 경우는 네트워크 스위치의 지원과 추가 설정이 필요합니다. 개별 옵션에 대한 참고사항은 로컬 사본 /usr/src/linux/Documentation/networking/bonding.txt를 참고하십시오.
우선 연결할 인터페이스의 설정을 지우겠습니다:
config_eth0="null"
config_eth1="null"
config_eth2="null"
다음, 인터페이스간 본딩을 지정하십시오:
slaves_bond0="eth0 eth1 eth2"
config_bond0="192.168.100.4/24"
# Pick a correct mode and additional configuration options which suit your needs
mode_bond0="balance-alb"
실행 레벨에서 net.eth* 서비스를 제거하고 net.bond0을 만들어 올바른 실행 레벨에 추가하십시오.
브릿징(802.1d 지원)
브릿징은 네트워크를 함께 이을때 사용합니다. ADSL 모뎀으로 인터넷에 연결하는 서버와 다른 컴퓨터가 ADSL 모뎀으로 인터넷에 연결할 수 있도록 하는 무선 액세스 카드를 보유한 시스템이 있다면 두 인터페이스를 브릿지로 한데 묶을 수 있습니다.
# 브릿지 설정 - 상세 정보는 "man brctl" 참조
bridge_forward_delay_br0=0
bridge_hello_time_br0=200
bridge_stp_state_br0=1
# bridge br0에 포트 추가
bridge_br0="eth0 eth1"
# dhcp가 시작되지 않도록 포트를 null로 설정해야 합니다.
config_eth0="null"
config_eth1="null"
# 최종적으로 브릿지에 주소 부여 - DHCP를 사용할 수 있음
config_br0="192.168.0.1/24"
# 추가 설정이 필요할 수 있으므로 eth0과 eth1에 의존
rc_net_br0_need="net.eth0 net.eth1"
일부 브릿지 설정을 활용하려면, 변수 이름 문서를 참고하십시오.
IPv6 브릿징을 할 경우, 위 예제와 같이 SLAAC 에서 STP 를
1
로 설정해야합니다.MAC 주소
네트워크 설정 파일을 통해서도 인터페이스 맥 주소를 바꿀 수 있습니다.
# To set the MAC address of the interface
mac_eth0="00:11:22:33:44:55"
# To randomize the last 3 bytes only
mac_eth0="random-ending"
# To randomize between the same physical type of connection (e.g. fibre,
# copper, wireless) , all vendors
mac_eth0="random-samekind"
# To randomize between any physical type of connection (e.g. fibre, copper,
# wireless) , all vendors
mac_eth0="random-anykind"
# Full randomization - WARNING: some MAC addresses generated by this may
# NOT act as expected
mac_eth0="random-full"
터널링
터널링은 인터페이스 핸들러가 처리할 수 있으므로 프로그램을 추가로 설치할 필요가 없습니다.
# For GRE tunnels
iptunnel_vpn0="mode gre remote 207.170.82.1 key 0xffffffff ttl 255"
# For IPIP tunnels
iptunnel_vpn0="mode ipip remote 207.170.82.2 ttl 255"
# To configure the interface
config_vpn0="192.168.0.2 peer 192.168.1.1"
VLAN (802.1q 지원)
VLAN 기능 지원을 사용하려면 sys-apps/iproute2를 설치했는지, ifconfig대신 iproute2를 설정 모듈로 사용중인지 확인하십시오.
가상랜은 각각의 네트워크 장치가 하나의 네트워크 세그먼트에 연결했을 때(설사 그렇지 않더라도)취할 수 있는 네트워크 장치 그룹입니다. VLAN 구성원은 동일한 물리 네트워크를 공유하더라도 동일한 VLAN의 구성원만을 볼 수 있습니다.
VLAN을 설정하려면 우선 다음과 같이 /etc/conf.d/net에 VLAN 번호를 지정하십시오:
vlans_eth0="1 2"
다음 각각 VLAN의 인터페이스를 설정하십시오:
config_eth0_1="172.16.3.1 netmask 255.255.254.0"
routes_eth0_1="default via 172.16.3.254"
config_eth0_2="172.16.2.1 netmask 255.255.254.0"
routes_eth0_2="default via 172.16.2.254"
VLAN별 설정은 다음과 같이 vconfig로 처리합니다:
vlan1_name="vlan1"
vlan1_ingress="2:6 3:5"
eth0_vlan1_egress="1:2"
일부 VLAN 설정을 위해, 변수 이름 문서를 참고하십시오.
도입부
리눅스에서의 무선 네트워크는 보통 꽤 간단합니다. WiFi를 설정하는 방식에는 그래픽 클라이언트, 텍스트 형식 인터페이스, 명령행 인터페이스 세가지가 있습니다.
가장 쉬운 방법이라면 데스크톱 환경을 설치했을 경우 그래픽 클라이언트를 사용하는 방법입니다. wicd와 NetworkManager와 같은 대부분의 그래픽 클라이언트에서는 자체적으로 설명이 잘 되어 있습니다. 간단하게 가리키고 누르는 인터페이스를 제공하여 사용자가 짧은 시간안에 네트워크를 구성할 수 있게 해줍니다.
NetworkManager와 wicd에는 메인 그래픽 인터페이스와 텍스트 형식 인터페이스 유틸리티를 함께 제공합니다.
ncurses
USE 플래그를 넣고 net-misc/networkmanager 또는 net-misc/wicd 꾸러미를 이머지하십시오. nmtui 또는 wicd-curses 유틸리티는 X 또는 Wayland 기반 데스크톱 환경을 사용하지 않지만 설정 파일을 직접 편집하지 않고 쉽게 사용할 수 있는 도구를 원하는 이에게 일부 도움을 줍니다.무선 네트워크는 명령줄에서 몇가지 설정 파일을 편집하는것만으로도 설정할 수 있습니다. 설정에 약간의 시간이 필요하지만 다운로드하고 설치할 꾸러미의 수는 적습니다. 그래픽 클라이언트는 대부분 자체적으로 설명이 되어 있습니다만(무려 홈페이지에 도움이 되는 스크린샷도 있음), 대신 명령줄 환경에 중점을 두겠습니다.
명령줄 기반 무선 네트워크 설정을 지원하는 도구는 net-wireless/iw, net-wireless/wireless-tools, net-wireless/wpa_supplicant 세가지가 있습니다. 물론 이들 중 net-wireless/wpa_supplicant를 권장합니다. 기억해야 할 중요한 점은 무선 네트워크 설정은 전체 설정 기반이며, 인터페이스 기반이 아닙니다.
net-wireless/wireless-tools의 차기 버전 net-wireless/iw 프로그램은 대부분의 카드와 드라이버를 지원합니다만 WPA 전용 액세스 포인트에는 연결하지 못합니다. 무선 네트워크에서 WEP 암호화만을 지원하거나 완전히 개방된 네트워크라면, net-wireless/iw 꾸러미가 다른 꾸러미에 비해 단순함을 넘어 제격입니다.
일부 무선 네트워크 카드는 기본적으로 비활성 상태입니다. 이를 활성화하려면 하드웨어 문서를 참고하십시오. 일부 카드는 rfkill 프로그램으로 활성화할 수 있습니다. 이 경우 rfkill list 명령으로 존재하는 카드를 살펴보신 후, rfkill unblock INDEX 명령으로 무선 네트워크 기능을 활성화 하십시오. 그렇지 않으면 무선 네트워크 카드를 버튼, 스위치, 특수 키 조합을 활용하여 랩톱에서 활성화해야합니다.
WPA supplicant
WPA supplicant 프로젝트에서는 WPA를 활성화한 액세스 포인트에 연결할 수 있도록 하는 꾸러미를 제공합니다.
root #
emerge --ask net-wireless/wpa_supplicant
wpa_supplicant가 동작하려면 커널에서 CONFIG_PACKET을 활성화해야합니다. 현재 커널에서 활성화했는지 보려면, 다음을 시도하십시오:
root #
zgrep CONFIG_PACKET /proc/config.gz
root #
grep CONFIG_PACKET /usr/src/linux/.config
USE 플래그 설정에 따라 wpa_supplicant를 KDE에 멋지게 붙을 Qt4로 작성한 그래픽 인터페이스로 설치할 수 있습니다. Qt5로 작성한 그래픽 인터페이스 프로그램을 띄우려면 net-wireless/wpa_supplicant 꾸러미에 대해
USE="qt5"
를 활성화하십시오.다음 /etc/conf.d/net을 설정하여 wireless-tools 보다 wpa_supplicant 모듈이 우선하도록 설정하십시오(둘다 설치했다면 wireless-tools가 기본입니다).
# Prefer wpa_supplicant over wireless-tools
modules="wpa_supplicant"
host-ap 드라이버를 사용할 때 wpa_supplicant를 올바르게 사용할 수 있으려면 카드를 관리 모드로 설정해야 합니다. /etc/conf.d/net에서
iwconfig_eth0="mode managed"
로 설정하시면 됩니다.다음 wpa_supplicant 자체를 설정하십시오(액세스 포인트를 어떻게 보안처리할지에 따라 조금 어려울 수 있습니다). 아래 예제에서는 wpa_supplicant에 딸려오는 /usr/share/doc/wpa_supplicant-<version>/wpa_supplicant.conf.gz 내용을 취해 단순화했습니다.
# The below line not be changed otherwise wpa_supplicant refuses to work
ctrl_interface=/var/run/wpa_supplicant
# Ensure that only root can read the WPA configuration
ctrl_interface_group=0
# Let wpa_supplicant take care of scanning and AP selection
ap_scan=1
# Simple case: WPA-PSK, PSK as an ASCII passphrase, allow all valid ciphers
network={
ssid="simple"
psk="very secret passphrase"
# The higher the priority the sooner we are matched
priority=5
}
# Same as previous, but request SSID-specific scanning (for APs that reject
# broadcast SSID)
network={
ssid="second ssid"
scan_ssid=1
psk="very secret passphrase"
priority=2
}
# Only WPA-PSK is used. Any valid cipher combination is accepted
network={
ssid="example"
proto=WPA
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP WEP104 WEP40
psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
priority=2
}
# Plaintext connection (no WPA, no IEEE 802.1X)
network={
ssid="plaintext-test"
key_mgmt=NONE
}
# Shared WEP key connection (no WPA, no IEEE 802.1X)
network={
ssid="static-wep-test"
key_mgmt=NONE
# Keys in quotes are ASCII keys
wep_key0="abcde"
# Keys specified without quotes are hex keys
wep_key1=0102030405
wep_key2="1234567890123"
wep_tx_keyidx=0
priority=5
}
# Shared WEP key connection (no WPA, no IEEE 802.1X) using Shared Key
# IEEE 802.11 authentication
network={
ssid="static-wep-test2"
key_mgmt=NONE
wep_key0="abcde"
wep_key1=0102030405
wep_key2="1234567890123"
wep_tx_keyidx=0
priority=5
auth_alg=SHARED
}
# IBSS/ad-hoc network with WPA-None/TKIP
network={
ssid="test adhoc"
mode=1
proto=WPA
key_mgmt=WPA-NONE
pairwise=NONE
group=TKIP
psk="secret passphrase"
}
무선 네트워크 도구
초기 설정 및 관리 모드
무선 도구 프로젝트en에서는 기본 무선 네트워크 인터페이스를 WEP 보안 수준으로 설정하는 일반적인 수단을 제공합니다. WEP 보안이 형편없는 방식이긴 하지만, 여전히 전세계에서 일반적으로 사용합니다.
무선 도구 설정은 몇가지 주요 변수로 처리합니다. 아래의 예제 설정 파일은 필요한 모든 내용을 설명했습니다. 참고해둘 사항은 설정을 하지 않으면 "완전히 비암호화한 액세스 포인트에 연결"함을 의미합니다. 무선 네트워크 도구는 언제든 어떤 시스템에든 연결 시도를 진행합니다.
root #
emerge --ask net-wireless/wireless-tools
현재 무선 네트워크 스택 도구는 net-wireless/iw지만, 새 명령에 net-misc/netifrc는 동작하지 않습니다. netifrc를 사용할 때는 net-wireless/wireless-tools를 사용해야 합니다. 자세한 내용은 변수 이름 문서를 참고하십시오.
# Prefer iwconfig over wpa_supplicant
modules="iwconfig"
# Configure WEP keys for Access Points called ESSID1 and ESSID2
# You may configure up to 4 WEP keys, but only 1 can be active at
# any time so we supply a default index of [1] to set key [1] and then
# again afterwards to change the active key to [1]
# We do this incase you define other ESSID's to use WEP keys other than 1
#
# Prefixing the key with s: means it's an ASCII key, otherwise a HEX key
#
# enc open specified open security (most secure)
# enc restricted specified restricted security (least secure)
key_ESSID1="[1] s:yourkeyhere key [1] enc open"
key_ESSID2="[1] aaaa-bbbb-cccc-dd key [1] enc restricted"
# The below only work when we scan for available Access Points
# Sometimes more than one Access Point is visible so we need to
# define a preferred order to connect in
preferred_aps="'ESSID1' 'ESSID2'"
AP 선택 세부 설정
AP 선택을 세밀하게 설정할 몇가지 추가 옵션을 넣을 수 있습니다만 필요하진 않습니다.
시스템을 설정하는 방법중 하나는 선호하는 AP에만 접속할 수 있게 하는 방법입니다. 기본적으로 모든 설정대로 돌아가지 않고 wireless-tools가 비암호화 액세스 포인트에 연결할 수 있다면 그렇기 진행합니다. associate_order 변수로 제어할 수 있습니다. 아래의 표를 통해 값 목록과 처리 방식을 설명하겠습니다.
값 | 설명 |
---|---|
any | 기본 동작 |
preferredonly | 선호 목록에서 나타나는 AP에만 연결 |
forcepreferred | AP가 검색해서 나타나지 않을 경우 선호 순서대로 AP에 강제 연결 |
forcepreferredonly | AP를 검색하지 않음 - 대신 다른 AP에도 순서대로 연결 시도 |
forceany | forcepreferred와 동일하며 존재하는 다른 AP에도 연결 |
blacklist_aps와 unique_ap 선택도 있습니다. blacklist_aps는 preffered_aps와 비슷하게 동작합니다. unique_aps는 두번째 무선 네트워크 인터페이스가 첫번째 인터페이스와 마찬가지로 동일한 액세스 포인트에 연결할 수 있는지 여부인 yes와 no 값입니다.
# Sometimes you never want to connect to certain access points
blacklist_aps="'ESSID3' 'ESSID4'"
# If you have more than one wireless card, you can say if you want
# to allow each card to associate with the same Access Point or not
# Values are "yes" and "no"
# Default is "yes"
unique_ap="yes"
애드혹 또는 마스터 모드
관리 모드에서 액세스 포인트 연결에 실패했을 경우 시스템을 ad-hoc 노드로 설정하려면 이 항목을 대체 수단으로 사용하십시오:
adhoc_essid_eth0="This Adhoc Node"
ad-hoc 네트워크에 연결하거나 master 모드로 시스템을 구동하여 자체를 액세스포인트로 만들 수 있습니다.
# Set the mode - can be managed (default), ad-hoc or master
# Not all drivers support all modes
mode_eth0="ad-hoc"
# Set the ESSID of the interface
# In managed mode, this forces the interface to try and connect to the
# specified ESSID and nothing else
essid_eth0="This Adhoc Node"
# We use channel 3 if you don't specify one
channel_eth0="9"
채널 선택에 관련된 중요한 자료는 NetBSD 문서에서 찾을 수 있는 BSD 무선랜 문서(en)입니다. 14개의 채널이 존재하는데 1-11 채널을 북아메리카에서 합법적으로 쓸 수 있고, 1-13 채널은 유럽에서 쓸 수 있으며 10-13 채널은 프랑스, 14번 채널은 일본에서만 쓸 수 있습니다. 의심이 간다면 무선 네트워크 카드 또는 액세스 포인트에 딸려오는 문서를 참고하십시오. 선택한 채널이 액세스 포인트의 채널과 동일한지(또는 다른 카드가 ad-hoc 네트워크 상태인지) 확인하십시오. 북아메리카와 대부분의 유럽 지역에서 판매하는 카드 기본 값은 3입니다. 프랑스에서 판매하는 카드 기본값은 11이며 일본에서 판매하는 카드 기본값은 14입니다.
무선 네트워크 도구 문제 해결
무선 네트워크를 띄우는데 드라이버 또는 환경 문제가 있기 때문에 이에 대해 도움을 줄 몇가지 변수가 있습니다. 시도해 볼 변수에 대한 내용을 아래의 표로 정리했습니다.
변수 | 기본값 | 설명 |
---|---|---|
iwconfig_eth0 | iwconfig에 무얼 전달하는지에 대한 자세한 내용은 iwconfig 맨 페이지를 보십시오 | |
iwpriv_eth0 | iwpriv에 무얼 전달하는지에 대한 자세한 내용은 iwpriv 맨 페이지를 보십시오 | |
sleep_scan_eth0 | 0 | 검색을 시도하기 전에 대기할 초단위 시간입니다. 드라이버/펌웨어를 사용할 수 있기 전에 활성 시간이 더 필요한 경우 이 설정값이 필요합니다. |
sleep_associate_eth0 | 5 | 어떤 액세스 포인트에서 다른 액세스 포인트로 이동할 때 기다릴 초 단위 시간 |
associate_test_eth0 | MAC | 어떤 드라이버는 연결을 시도하거나 연결을 잃었을 때 잘못된 MAC 주소를 초기화 하지 못합니다. 일부 드라이버는 연결을 시도하거나 연결을 잃었을 때, 연결 품질 정보를 초기화 하지 못하기도 합니다. MAC, 연결 품질 정보를 포함한 설정을 유효화합니다. |
scan_mode_eth0 | 어떤 드라이버는 ad-hoc 모드에서 검색해야 합니다. 따라서 검색에 문제가 있으면 여기서 ad-hoc으로 설정하십시오 | |
iwpriv_scan_pre_eth0 | 검색을 시도하기 전 인터페이스에 iwpriv 명령을 보냅니다. 자세한 내용은 iwpriv 맨 페이지를 살펴보십시오. | |
iwpriv_scan_post_eth0 | 검색이 끝난 후 인터페이스에 iwpriv 명령을 보냅니다. 자세한 내용은 iwpriv 맨 페이지를 살펴보십시오. |
ESSID별 네트워크 설정 정의
이 절에서, ESSID를 기반으로 한 네트워크 설정 방법을 알려드리겠습니다. 예를 들어 ESSID ESSID1로 설정한 무선 네트워크에서 고정 IP 주소를 사용하고 ESSID ESSID2에서는 DHCP를 사용한다고 하겠습니다.
wpa_supplicant 뿐만 아니라 wireless-tools에 대해서도 유효합니다
변수 이름 문서를 참고하십시오.
config_ESSID1="192.168.0.3/24 brd 192.168.0.255"
routes_ESSID1="default via 192.168.0.1"
config_ESSID2="dhcp"
fallback_ESSID2="192.168.3.4/24"
fallback_route_ESSID2="default via 192.168.3.1"
# We can define nameservers and other things too
# NOTE: DHCP will override these unless it's told not to
dns_servers_ESSID1="192.168.0.1 192.168.0.2"
dns_domain_ESSID1="some.domain"
dns_search_domains_ESSID1="search.this.domain search.that.domain"
# You override by the MAC address of the Access Point
# This handy if you goto different locations that have the same ESSID
config_001122334455="dhcp"
dhcpcd_001122334455="-t 10"
dns_servers_001122334455="192.168.0.1 192.168.0.2"
기본 함수 훅
Four functions can be defined in /etc/conf.d/net:
preup()
, called before an interface is brought up;predown()
, called before an interface is brought down;postup()
, called after an interface is brought up; andpostdown()
, called after an interface is brought down.
Each of these these functions is called with the interface name, available within each function via the IFACE variable, so that one function can control multiple interfaces.
The return values for the preup()
and predown()
functions should be:
- 0 to indicate success, and that configuration or de-configuration of the interface can continue.
- A non-zero value otherwise.
If preup()
returns a non-zero value, interface configuration will be aborted. If predown()
returns a non-zero value, the interface will not be allowed to continue de-configuration.
Return values for the postup()
and postdown()
functions are ignored since there's nothing to do if they indicate failure.
${IFACE}는 올리고 내릴 인터페이스 설정 값입니다. ${IFVAR}는 배시에서 허용하는 변수 이름로 바꾼 ${IFACE}입니다.
preup() {
# Test for link on the interface prior to bringing it up. This
# only works on some network adapters and requires the ethtool
# package to be installed.
if ethtool ${IFACE} | grep -q 'Link detected: no'; then
ewarn "No link on ${IFACE}, aborting configuration"
return 1
fi
# Remember to return 0 on success
return 0
}
predown() {
# The default in the script is to test for NFS root and disallow
# downing interfaces in that case. Note that if you specify a
# predown() function you will override that logic. Here it is, in
# case you still want it...
if is_net_fs /; then
eerror "root filesystem is network mounted -- can't stop ${IFACE}"
return 1
fi
# Remember to return 0 on success
return 0
}
postup() {
# This function could be used, for example, to register with a
# dynamic DNS service. Another possibility would be to
# send/receive mail once the interface is brought up.
return 0
}
postdown() {
# This function is mostly here for completeness... I haven't
# thought of anything nifty to do with it yet ;-)
return 0
}
함수 작성에 대해 더 알아보려면 /usr/share/doc/netifrc-*/net.example.bz2를 살펴보십시오.
무선 네트워크 도구 함수 훅
이 부분은 WPA Supplicant와 동작하지 않습니다만 ${ESSID}와 ${ESSIDVAR} 변수는
postup()
함수에서 동작하는 변수입니다.Two functions can be defined in /etc/conf.d/net:
preassociate()
, called before association.postassociate()
, called after association.
Each of these these functions is called with the interface name, available within each function via the IFACE variable, so that one function can control multiple interfaces.
The return values for the preassociate() function should be:
- 0 to indicate success, and to continue configuration.
- A non-zero value otherwise.
If preassociate()
returns a non-zero value, interface configuration will be aborted.
postassociate()
함수의 반환 값은 실패했을 경우 아무런 조치를 취하지 않기 떄문이 무시합니다.
${ESSID}는 시스템이 연결한 AP에서 제공하는 정확한 ESSID 설정입니다. ${ESSIDVAR}는 배시에서 허용하는 변수 이름으로 바꾼 ${ESSID}입니다.
preassociate() {
# The below adds two configuration variables leap_user_ESSID
# and leap_pass_ESSID. When they are both configured for the ESSID
# being connected to then we run the CISCO LEAP script
local user pass
eval user=\"\$\{leap_user_${ESSIDVAR}\}\"
eval pass=\"\$\{leap_pass_${ESSIDVAR}\}\"
if [[ -n ${user} && -n ${pass} ]]; then
if [[ ! -x /opt/cisco/bin/leapscript ]]; then
eend "For LEAP support, please emerge net-misc/cisco-aironet-client-utils"
return 1
fi
einfo "Waiting for LEAP Authentication on \"${ESSID//\\\\//}\""
if /opt/cisco/bin/leapscript ${user} ${pass} | grep -q 'Login incorrect'; then
ewarn "Login Failed for ${user}"
return 1
fi
fi
return 0
}
postassociate() {
# This function is mostly here for completeness... I haven't
# thought of anything nifty to do with it yet
return 0
}
${ESSID}와 ${ESSIDVAR}는
predown()
과 postdown()
함수에서 사용할 수 없습니다.개별 정의 함수 작성에 대해 더 알아보려면 /usr/share/doc/netifrc-*/net.example.bz2를 살펴보십시오.
네트워크 관리
랩톱이라면 시스템을 항상 움직일 수 있습니다. 결과적으로 시스템에 항상 이더넷 케이블에 붙어있거나 존재하는 액세스 포인트와 연결된 상태가 아닐 수도 있습니다. 또한 사용자라면 이더넷 케이블을 연결하거나 액세스 포인트를 발견하면 자동으로 동작하는 네트워크를 원할 것입니다.
이 장에서는, 이 문제를 어떻게 해결할지를 다룹니다.
이 문서는 ifplugd에 대해서만 이야기하지만, netplug와 같은 다른 대안책도 있습니다. netplug는 ifplugd의 경량 버전이지만, 커널 네트워크 드라이버가 제대로 동작해야 하며, 대부분의 드라이버에서는 동작하지 않습니다.
ifplugd
ifplugden는 이더넷 케이블을 연결하거나 뺄때 인터페이스를 시작하고 멈추는 데몬입니다. 일정 범위내에 새로운 액세스 포인트가 들어왔을 때 연결 감지를 관리할 수도 있습니다.
root #
emerge --ask sys-apps/ifplugd
ifplugd 설정은 거의 누워서 떡먹기 입니다. 설정은 /etc/conf.d/net에 저장합니다. 존재하는 변수에 대한 설명은 man ifplugd를 실행하여 보십시오. 또한 더 자세한 예제는 /usr/share/doc/netifrc-*/net.example.bz2에서 참고하십시오.
# Replace eth0 with the interface to be monitored
ifplugd_eth0="..."
# To monitor a wireless interface
ifplugd_eth0="--api-mode=wlan"
다중 네트워크 연결을 관리하려면, 추가적으로, 사용자가 다중 DNS 서버와 설정을 쉽게 다룰 도구를 추가하려 할 것입니다. 이는 DHCP를 통해 IP 주소를 시스템에서 받는다면 매우 간단합니다.
root #
emerge --ask net-dns/openresolv
더 많은 기능을 알아보려면 man resolvconf 명령을 참고하십시오.