[질문] Network Virtual Interface가 존재하는 서버에서 socket
안녕하세요 ..
linux box에서 여러개의 NIC가 있는 대부분의 경우 Network의 subnet이
다르기 때문에 socket binding에 의한 문제는 제기 되지 않을 텐데요
eth0:1 과 같은 가상 디바이스를 사용하여 사용할때 socket binding에
문제가 있어서요.
socket()함수를 사용하여 bind()시키면 eth0의 IP를 사용하거나
또는 default gateway로 나갈수 있는 ( 이경우는 NIC가 2장일때 입니다.)
Network Interface의 IP를 가지고 socket()~bind()을 하네요.
여기서 문제 되는것은 가상 IP를 이용해야 상대편 서버와 통신 할 수 있는
환경이 될때 telnet 이나 traceroute를 사용 할 수 있도록 바이너리를
만들고 싶은데 능력이 부족하네요..
특정 NIC를 잡을 수 있도록 socket()에 지정 할 수 있는 방법을 알고 싶어요
예)
eth0 : 192.168.0.1
eth0:1 100.168.0.1
ping 100.168.100.1 일경우
binding device는 192.168.0.1을 사용하기 때문에 ping 이 깨어집니다.
이때
ping -I 100.168.0.1 100.168.100.1 일 경우
binding device가 정상이기 때문에 사용가능합니다.
telnet 100.168.100.1 일 경우
위 처럼 192.168.0.1을 binding device로 사용하기 때문에
통신이 되지 않습니다..
긴 글 읽어 주셔서 감사합니다 _(__)_
답변이 될지 모르겠지만...
일단 서버인지 클라이언트인지 글이 조금 헷갈려서 둘다 적어봅니다.
서버인 경우에는 보통 INADDR_ANY(0)로 바인딩하면 상관없으니 어느 디바이스에 붙어야 한다는 것은 조금 어폐가 있는 것 같습니다. 그리고 클라이언트의 경우엔 바인딩이 아나리 라우팅 테이블을 통해서 나가므로 라우팅 테이블만 제대로 되어있다면 주소가 몇개가 되든지 간에 상관이 없을 것입니다. 그리고 1개의 NIC에 여러개의 앨리어스를 할당하는 경우는 실제 서브넷은 동일하거나 혹은 브릿지로만 물리적으로 섹터를 나누어진 경우이므로 아무런 문제가 발생하지 않습니다.
일반적인 그냥 프로그램으로 접속하는데 아무런 문제가 없을듯 하며, 잘 안된다면 라우팅 테이블을 살펴보시는게 좋을것 같습니다.
========================================
* The truth will set you free.
댓글 달기