2 NIC상에서 UDP outgoing interface 지정
글쓴이: sjahn90 / 작성시간: 화, 2004/06/01 - 5:33오후
하나의 서버에 2NIC을 꽂고 같은 서브네트워크로 구성하였습니다.
이 서버를 가지고 목적지별로 Load balance하게 UDP 패킷을 전송할려고 합니다.
패킷을 수신한후 그 패킷을 전송하면, 2개의 NIC중 항상 하나의 Interface로만 UDP 데이타가 전송됩니다.
bonding이나 teaming과 같은 별도의 모듈 도움없이 할려고 합니다.
UDP 패킷 전송시 outgoing interface를 지정할 수 있나요?
Forums:
저도 같은 문제를 격고 있습니다.ip address 에 bind
저도 같은 문제를 격고 있습니다.
ip address 에 bind 하는 것 만으로는, 실제로 패킷이 나가는 interface 를 조정 할 수 없네요.
socket 의 옵션으로 interface 를 지정할 수 있는 방법은 없을까요?
참고 : SO_BINDTODEVICE
man 페이지를 이리저리 보다 보니 section 7 의 socket 에 이런 옵션이 있더군요.
단지, Linux 에서만 되는 옵션인듯 싶습니다.
비슷한 동작을 할 것 같아 보이기는 하는데...
2 NIC 를 가진 머신이 없어서 테스트 해 보지는 =.=;
네 테스트 해 봐야겠네요. ^^; 감사합니다.
네 테스트 해 봐야겠네요. ^^; 감사합니다.
man 7 socket 상에서 보면 SO_BINDTODEVICE는 단지
man 7 socket 상에서 보면 SO_BINDTODEVICE는 단지 특정 인터페이스에서 들어오는 패킷만을 받을지를 결정하는 옵션이라고만 나와있네요.. outgoing 인터페이스를 지정한다는 말은 없네요..
제가 테스트를 해 봐야 하는데 현재 저에게 2 NIC을 테스트할만한 시스템이 없어서리...
Yabaman님 테스트 결과가 나오면 좀 알려주세요..
참고로 인터넷 상에서 찾아보니 UDP outgoing을 지정할려면 raw socket으로 프로그램하던가, 아니면 kernel에 새로운 socket option을 부여해서 만들어야 한다고 하던데요. 정녕 이러한 방법외엔 다른 방법이 없는건가요?
제가 잘 모르는 것인지???
마지막 sjahn90님의 글을 읽고 방법을 찾아봤는데...
제가 잘못 찾은 것은 아닌지 모르지만....
Raw Socket에서는 들어오는 인터페이스에 대해서 할 수는 있어도.
나가는 인터페이스까지는 지정할 수 없는거 아닌가요??
제가 잘못 알았다면 답글 좀들 남겨주시와요...
그리고 커널도 뒤져봤는데 옵션을 못찾겠더군요.
또한 라우터던가 스위치의 물리적인 방법이 최상이 아닌가도 생각되고.
정말 초강수는 두개의 NIC에서 따로따로 IP주고 한쪽의 데이터를 다른 한쪽의 IP 대역 으로 보내줘야 하는것은 아닌가하구 생각됩니다...
짧은 초보의 말이었습니다.
완료 딱지가 안 붙어
완료 딱지가 안 붙어 있길래 살짝 정리도 할 겸 해서 덧글을 달아보자면...
이전의 어느 글(http://kldp.org/node/28229)에서도 짐작할 수 있듯이 SO_BINDTODEVICE 옵션을 사용하면 가능합니다.
단, 장치에 바인드 시키는 데에는 CAP_NET_RAW 권한(일반적인 경우, 루트 권한)이 필요합니다. 물론 bind()로 입력/출력 인터페이스를 지정하려는 경우에도 특별 권한이 필요하기는 하지요.
두 인터페이스가 연결된 네트워크가 다른 경우는 bind()로도 출력 인터페이스를 (정확하게는 출력시 사용할 주소를) 지정할 수 있습니다. 단, 양쪽 인터페이스 모두에 대해서 목적지로의 라우팅 항목이 있어야 한다든가 하는 등의 신경써 줘야 할 꺼리들이 있긴 합니다.
----
$PWD `date`
$PWD `date`
이렇게 하면 되지 않나요?!
아마도 firewall 문제
s.bind((ip주소, 포트))
하시면 됩니다. firewall 꺼보세요
댓글 달기