리눅스 다수개의 NIC 카드 설정 문의
안녕하세요.
리눅스 서버의 NIC 카드를 설정하다 이상현상이 발생하여 이렇게 글을 올립니다.
몇일째 이걸 잡고 씨름중인데, 난감하여 도움 요청드립니다.
현재 리눅스 페도라7 커널 2.6.9-78.ELsmp를 사용하고 있습니다.
NIC은 총 2포트씩 2개, 총 4개를 사용하고 있습니다.
이 4개의 NIC 포트들의 모두 드라이버 설치가 잘되어 있으며, 개별적으로 동작 시 잘 동작하고 있습니다.
물론 IP도 개별적으로 할당하였습니다.
이 4개를 하나의 네트워크에서 동시에 다음과 같은 구조로 사용하려고 하는데요.
리눅스 서버----- eth0 : RAID 장비
|-- eth1 : 카메라 장비
|-- eth2 : 모니터링 장비
|-- eth3 : .......
문제는 커널 부팅 후, 4개를 한번에 활성화 시키거나 한개를 먼저 활성화 시킨 후 차례대로 활성화 시켜도
제일 먼저 잡히는 NIC Port를 잡아서 대표 포트로 사용해버립니다.
그러니까 eth0이 먼저 올라가면, 4개의 IP를 통한 통신이 모두 eth0을 통해서 통신을 합니다.
4개의 NIC 포트에 각각 랜선을 연결해도 eth0번의 랜선을 제거하면 나머지 NIC 포트들은 통신이 안되는거죠.
보통 다른 네트워크의 중간에서 라우팅 기능으로 사용하셔서 이런 경우는 잘없더군요.
관계는 없지만, IRQ를 공유하는 건 아닌가 의심도 해서 확인해봤지만 별개도 할당되어 있네요.
이런 문제를 겪어보셨거나 알고 계신분이 계시면 조언 부탁드립니다.
그럼 좋은 하루 되십시오.
해결책이 나올때까지 삽질의 세계로 다시 들어가야겠네요.
자문자답이네요.
자문자답이네요.
커널에서는 같은 아이피 대역일 경우, 제일 처음 잡히는 장치를 대표 포트로 사용하는 듯 합니다. 이건 아마 가상IP를 이용해서 하나의 랜포트를
여러개의 IP로 분할 하여 사용할 경우를 위한 부분인 것 같은데요.
제가 해결한 방법은 소켓옵션 setsocketopt()을 사용하여 특정 IP와 특정 디바이스를 묶어주는 방법을 사용하였습니다.
setsockopt(m_ServerSocket, SOL_SOCKET, SO_BINDTODEVICE, (char *)m_ServerDevice, sizeof(m_ServerDevice))
여기서 ServerDevice에 eth0/eth1/eth2/eth3번을 지정해주니, 소켓에 할당된 IP에 대한 패킷이 해당 포트로 들어오는 경우에만 동작하게 되더군요.
이전 kldp를 검색하다가 발견하게 되었습니다.
그럼 좋은 하루들 되세요. ^^
udev를 이용하셔
이런 경우 udev 를 이용하시는 것도 좋은 방법입니다.
구글링 해보시면 관련 자료가 많이 있으므로..
댓글 달기