[질문] 동일한 라우팅 엔트리를 가지는 두개의 서로 다른 networ

skjean의 이미지

라우팅 테이블의 형식이 다음과 같습니다.
불행히도 2개의 동일한 network address에 대해서 2개의 서로 다른
network interface가 binding되어 있습니다.

setsockopt(... SO_BINDTODEVICE,,)와 같은 시스템 콜을 사용하지
않는 경우, 커널은 어떤 인터페이스를 통해서 패킷을 내보내게 되는지
궁금합니다.
--------------------------------------------
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.176.0 * 255.255.255.0 U 0 0 0 eth0
192.168.176.0 * 255.255.255.0 U 0 0 0 ehif
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default 192.168.176.2 0.0.0.0 UG 0 0 0 eth0
----------------------------------------------

어떤 원칙 같은 것이 있을까요?

ihavnoth의 이미지

eth0로 나가지 않나요? 위에서부터 차례대로..

없음

이광우의 이미지

이건 그냥 제 경험이니 참고하시라고 적습니다.
(끝의 ehif 가 뭔지는 모르겠지만요.)

리눅스에서 동일 라우팅 엔트리가 두개가 존재하면 커널에서 드랍하더군요.
이유는 어느 곳으로 나가야 할지 모르기 때문이 아닐까 생각이 듭니다.

동일한 라우팅 엔트리를 가지고도 정상적으로 동작을 하게 하려면,
ECMP(Equal Cost Multi Path) 형태로 하면 된다고 합니다.
(이것은 로드밸런싱할 때 쓰입니다.)

물론 이때는 '/proc/sys/net/ipv4/all/rp_filter' (경로가 맞는 지 모르겠군요. )
파일의 내용을 '0'으로 해주어야 합니다. rp_filter 라는 것은 return path filter의 약자인 걸로 기억이 되는 데 보안상의 이유로 기본적으로 1로 설정되어 있을 겁니다. rp_filter는 인터페이스 별로 있는 데 전체적인 설정 부분에서 변경해 주시면 됩니다. 이 부분을 안해주면 Equal Cost 가 아닌 경우에도 패킷이 안나가게 됩니다. (예를 들어 eth0로 패킷이 들어와서 eth1으로 응답 패킷이 나가야 하는 경우)

관련 정보는 Advance Routing HOWTO 문서에 있습니다.

http://www.tldp.org/HOWTO/Adv-Routing-HOWTO/index.html

참고로 위에서 말하는 Cost 값은 OSPF 등의 라우팅 프로토콜에서 최적 경로 찾는 데에도 사용됩니다.

http://www.cisco.com/warp/public/104/1.html

Be Creative For Fun!!

skjean의 이미지

답변글들 감사드립니다.
일단 drop은 아닙니다. 기본적으로 linux가 살아나면
eth0는 enable되어 있는 상태인데, 여기에 모듈의
형태로 ehif 인터페이스를 올립니다.

ehif라고 하는것은 송신되는 IP 패킷에
대해서 특정 작업을 수행하고 난 이후에, eth0로
패킷을 내보내는 역할을 수행하는 가상 네트워크
인터페이스입니다.

패킷은 setsockopt()를 이용해서 ehif를 경유하게
할 수 있고, (TCP(UDP) --> IP --> ehif --> eth0)
또는 바로 일반 패킷 송신처럼 eth0만을 경유해서
송신할 수 있습니다. (TCP(UDP) --> IP --> eth0)

IP routing source code를 보면 커널의 FIB를 통해서
해당 패킷이 경유해서 나아가야 하는 인터페이스를
결정해야 하는데, 커널 소스 분석 실력이 부족하여
동일 metric의 라우팅 엔트리에 대해서 어떤 곳으로
내보내는지는 파악하기가 힘들더군요...

일단 패킷은 eth0(맨처음 디폴트로 살아 있는
인터페이스)로 나갑니다. 즉, setsockopt()를
사용하기 이전에는 맨 처음 살아 있었던 인터페이스를
경유하는 것 같습니다.
단지, 제 추측입니다. 그래서 확신을 가지기 위해서
질문을 올렸던 것이구요...

ECMP에 대해서 좀 더 공부를 해 봐야겠습니다.
noth님과 이광우님에게 감사드립니다.

새해 복 많이 받으세요.. ^^;;

albamc의 이미지

전에 저도 비슷한 경우가 있었는데 ...

어떤? 룰에 의해서 인터페이스 하나가 정해지고

계속 그 인터페이스만을 쓰게 되더군요.

어떤? 룰인지 알게 되시면 가르쳐 주세요~ :D

^^*

지리즈의 이미지

skjean wrote:

default 192.168.176.2 0.0.0.0 UG 0 0 0 eth0

default gateway가 선언되어 있는 device로 나가지 않나요?

전에 정기적으로 네트워크가 죽어버리는 서버가 있어서..
뒤져보니..
network-script쪽에 GATEWAYDEV에 device를 지정하지 않았길래
지정해주니 그 다음부터 뻗는 일이 없어지더군요...

[admin@ns admin]$ grep -i gatewaydev /etc/sysconfig/network-scripts/*
<중략>
/etc/sysconfig/network-scripts/network-functions: /sbin/ip route add default dev ${GATEWAYDEV}

There is no spoon. Neo from the Matrix 1999.

ihavnoth의 이미지

원하시는게 ethif로 들어가게 하실려면

ip 명령어로 추가하시면될듯하네요

ip rule 해보시면 main테이블이 기본 커널의 라우팅 테이블입니다.

그위에 새로운 테이블 생성하시고 거기다가 라우팅 엔트리를 한개 더 추가히시면 편할것 같네요...

물론 main테이블에 맨위에 올리셔두 상관없겠지만요..

지나가다가 한마디 해봅니다 ^.^

없음

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.