Linux에서 몇 개의 사용자 지정 라우팅 테이블을 가질 수 있습니까?


12

나는 리눅스에서 커스텀 라우트 테이블을 다루고 있는데 "ip route"명령의 문서와 동작에 약간 혼란스러워한다. 유일하게 유효한 값은 0-255에 / etc / iproute2 / rt_tables에 정의 된 이름을 더한 것 같습니다.

255 local
254 main
253 default
0   unspec

사용자 정의 테이블의 경우 1-252가 남습니다. 정의되지 않은 테이블 이름을 사용하려고하면 오류가 발생합니다.

$ ip route show table kermit
Error: argument "kermit" is wrong: table id value is invalid

그러나 오류없이 255보다 훨씬 큰 숫자를 사용할 수있는 것 같습니다.

$ ip route show table 1000
[no output]
$ ip route add 10.10.10.0/24 dev eth0 table 1000
[no output]
$ ip route show table 1000
10.10.10.0/24 dev eth0  scope link

언젠가는 상황이 더 이상해집니다. maxint (2 ^ 31)에서 로컬 테이블 (255)로 "오버 플로우"됩니다.

$ ip route show table 2147483647
[no output]
$ ip route show table 2147483648
[exact output of table 255 (local)]

아무도 무슨 일이 일어나고 있는지 설명 할 수 있습니까? 실제로 사용할 수있는 maxint 사용자 지정 라우팅 테이블이 있습니까?

답변:


8

2.6 커널과 관련하여 max 테이블은 0xFFFFFFFF (rtnetlink.h에서)입니다. 그러나 iproute2는 필터에서 부호있는 정수를 사용하여 조회를 수행하므로 2 ^ 31에서 유효하지 않은 테이블을 지정했다고 생각하고 기본값은 테이블 255를 표시합니다.


따라서 잘못된 이름으로 오류가 발생하지만 잘못된 정수는 255입니까? 또한 255는 이전 최대 (2.4에서?)이지만 커널 2.6에서 32 비트 숫자로 증가했다고 가정합니까?
Bob

그렇습니다, 2.4와 2.2의 최대 값은 255입니다.
Ciclamino

또한 32 비트를 가진 값에 대해 항상 표 255를 표시하는 것은 계획된 동작이 아니며 버그 일뿐입니다. iproute에 대한 한 줄 패치로 4294967290 번호의 테이블을 만들고 표시 할 수있었습니다. 그러나 그렇게 간단하지는 않지만 2 ^ 32 테이블을 처리하지 않는 다른 부분이있을 수 있습니다.
Ciclamino

감사합니다 패치를 제출해야 할 수도 있습니다 :)
Bob

1
보다 최근의 도구는 최대 2 ^ 32-1까지 테이블 값을 허용하는 경향이 있습니다 (예 : $ ip -V ip utility, iproute2-ss180813 $ ip route list table 4294967296 Error: argument "4294967296" is wrong: table id value is invalid $ ip route list table 4294967295(출력 없음). 이전 동작은 "unspec"테이블 0 (255 아님)을 표시하는 것이었지만 0에는 255 (및 다른 테이블).
AB
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.