"/etc/network/interfaces"의 넷마스크 주소가 유효하지 않은 경우 ifup은 어떻게 합니까?

"/etc/network/interfaces"의 넷마스크 주소가 유효하지 않은 경우 ifup은 어떻게 합니까?

인터페이스 파일은 다음과 같습니다.

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 192.168.0.130
    netmask 250.255.255.0
    gateway 192.168.0.254

보시다시피 넷마스크 주소가 약간 잘못되었습니다. (255 대신 250) 문제는 아래 코드를 사용하여 현재 IP 주소와 넷마스크를 얻을 때입니다.

ioctl(iSock, SIOCGIFADDR, &stIFReq);
ioctl(iSock, SIOCGIFNETMASK, &stIFReq);

그것언제나반품"72,0,67,33"(Hex: 0x48004321) 두 ioctl 함수 모두에 해당됩니다. 이것이 일종의 오류 코드인지 버그인지 궁금합니다 . 넷마스크/IP 주소에 대해 어떤 유형의 검사가 수행되는지 , 주소가 판단되는지 ifup알고 싶습니다. ifup그것은 유효하지 않은 것으로 간주됩니다.

추가 정보:

  1. 리눅스 버전 2.6.35.3

  2. 비지박스 v1.18.5

  3. [ifup]은 스크립트가 아니라 시스템의 C 프로그램입니다.

답변1

시스템을 확인하세요. 대부분은 ifup셸 스크립트이므로 소스에서 스파이크를 확인하면 시스템이 수행하는 작업에 대한 아이디어를 얻을 수 있습니다. 다음 명령을 사용하여 스크립트의 위치를 ​​확인할 수 있습니다.

$ type -a ifup
ifup is /sbin/ifup

Feodra/Red Hat 배포판

/sbin/ifup이 쉘 스크립트 라이브러리가 포함된 내 시스템(Fedora 14)에서 이 파일을 통해 "마스크"를 얻는 /etc/sysconfig/network-scripts/network-functions경우 :grep

$ grep -i mask /etc/sysconfig/network-scripts/network-functions
    if [ -z "${NETMASK}" ]; then
    eval $(/bin/ipcalc --netmask ${IPADDR})
    eval $(/bin/ipcalc --prefix ${IPADDR} ${NETMASK})
    eval $(/bin/ipcalc --broadcast ${IPADDR} ${NETMASK})
    eval $(/bin/ipcalc --network ${IPADDR} ${NETMASK})

이 도구 ipcalc는 네트워크 구성에 대한 "계산"을 수행하는 실행 파일입니다.

명령줄에서 실행할 수도 있습니다.

$ /bin/ipcalc --netmask 192.168.1.1
NETMASK=255.255.255.0

$ /bin/ipcalc --prefix 192.168.1.1 255.255.255.0
PREFIX=24

데비안/우분투

ipcalc도구는 Debian/Ubuntu에서 약간 다르지만 기능은 비슷합니다.

$ ipcalc 192.168.1.1
Address:   192.168.1.1          11000000.10101000.00000001. 00000001
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.1.0/24       11000000.10101000.00000001. 00000000
HostMin:   192.168.1.1          11000000.10101000.00000001. 00000001
HostMax:   192.168.1.254        11000000.10101000.00000001. 11111110
Broadcast: 192.168.1.255        11000000.10101000.00000001. 11111111
Hosts/Net: 254                   Class C, Private Internet

귀하의 구성

페도라:

$ /bin/ipcalc --netmask 192.168.0.130
NETMASK=255.255.255.0

$ /bin/ipcalc --prefix 192.168.0.130 250.255.255.0
PREFIX=24

우분투:

$ ipcalc 192.168.0.130
Address:   192.168.0.130        11000000.10101000.00000000. 10000010
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.0.0/24       11000000.10101000.00000000. 00000000
HostMin:   192.168.0.1          11000000.10101000.00000000. 00000001
HostMax:   192.168.0.254        11000000.10101000.00000000. 11111110
Broadcast: 192.168.0.255        11000000.10101000.00000000. 11111111
Hosts/Net: 254                   Class C, Private Internet

따라서 가장 가능성이 높은 것은 설정이 어딘가에 잘못된 값을 설정하고 있다는 것입니다. 추가 디버깅을 위해서는 ip.

$ ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:19:d1:e8:4c:95 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.3/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::219:d1ff:fee8:4c95/64 scope link 
       valid_lft forever preferred_lft forever

답변2

ifup/ ifdown가 애플릿인 BusyBox를 실행 중입니다 . count_netmask_bits()기능 보기소스 코드, BusyBox는 LSB에서 시작하여 처음 1이 발견되면 중지됩니다. 따라서 잘못된 형식의 넷마스크를 알아차리지 못할 것입니다.

관련 정보