CIDR이 아닌 범위를 사용하는 ip 경로 명령

CIDR이 아닌 범위를 사용하는 ip 경로 명령

i-blocklist의 다음 국가 IP와 같은 IP 목록이 있습니다.https://www.iblocklist.com/lists.php?category=country

201.237.0.0-201.237.255.255와 같이 구독 없이 범위만 제공합니다.

이러한 목록 중 일부를 서버의 특정 인터페이스로 라우팅해야 하지만 위 표기법에서 범위를 지정하는 옵션이 ip 경로에 표시되지 않습니다.

어떤 아이디어가 있나요?

답변1

그만큼넷마스크 도구범위를 CIDR로 변환하는 데 매우 편리할 수 있습니다.

$ netmask 201.237.0.0:201.237.255.255
201.237.0.0/16
$ netmask 201.238.3.0:201.238.9.255
201.238.3.0/24
201.238.4.0/22
201.238.8.0/23

또한 사용 여부도 확인해야 합니다.IP세트아니면 그iptables geoip 모듈, 부분의xtables-애드온해당 범위를 직접 사용하는 것보다 더 유용하지 않습니다.

geoip의 경우 이 Q/A에서 다음 사용 예를 살펴보세요.Ubuntu IPTables는 1개 국가만 허용합니다.

답변2

범위 라우팅과 같은 것은 없습니다. 필요한 만큼 원하는 범위에 가깝게 서브넷을 라우팅하고 필요한 서브넷 IP에 포함되지 않은 다른 독립적인 수로 이를 보완할 수 있습니다.

귀하의 예에서 201.237.0.0-201.237.255.255 는 범위가 아니며 서브넷 201.237.0.0 /16 입니다. 원샷으로 라우팅할 수 있습니다.

범위는 201.237.0.1-201.237.1.3과 같으며 이 형식에서는 라우팅이 불가능합니다. 이 시나리오에서는 201.237.0.0 /24와 별도로 201.237.1.0 /30을 라우팅해야 하므로 기본적으로 2개의 경로로 처리하지만 이는 쉬운 경로입니다. 상황이 훨씬 더 복잡해질 수 있습니다.

답변3

AB 답변 확장 - 다음을 사용하여 전체 목록을 CIDR 표기법으로 변환할 수 있습니다.

for each in `cut -f2 -d":" ad  | tr "-" ":"` ; do netmask $each 2>/dev/null; done

또는 IP/넷마스크 표기법으로

 for each in `cut -f2 -d":" ad  | tr "-" ":"` ; do netmask -s $each 2>/dev/null; done

따라서 특정 인터페이스를 통해 특정 범위의 모든 IP를 푸시하려면 다음과 같이 할 수 있습니다.

이를 함께 사용하면 아래와 같이 스크립트를 사용하여 명령을 생성할 수 있습니다. "echo"를 제거하고 요구 사항에 맞게 iptables 명령을 마무리합니다.

#! /bin/bash

TMPFILE="/dev/shm/$$.del"

for each in `cut -f2 -d":" ad  | tr "-" ":"`
do
        netmask -s $each 2>/dev/null;
done > $TMPFILE


while read -r each
do
        ROUTE=${each%/*}
        NETMASK=${each#*/}
        echo /sbin/route add $ROUTE netmask $NETMASK ....
done <$TMPFILE

관련 정보