iptables에서 nftables로 마이그레이션해야 합니까?

iptables에서 nftables로 마이그레이션해야 합니까?

다음과 같은 iptables 규칙이 있습니다.

포트 10000으로 들어오는 1.2.3.4 및 5.6.7.8(소스)의 패킷을 10.10.10.10:1080의 외부 양말5 서버로 전달합니다. 서버 IP는 50.50.50.50입니다.

이 스키마는 소스 양이 높지 않고 동시에 외부 양말5 양도 높지 않은 경우 잘 작동합니다. 50개의 소스와 30,000개의 외부 양말이 있으면 iptables가 중단되고 패킷 전달이 없으므로 iptables 성능에 제한이 있는 것으로 의심됩니다. 누군가 nftables가 더 강력한지, 그렇다면 내 규칙을 nftables로 변환하는 방법을 말해 줄 수 있습니까?

*nat
:PREROUTING ACCEPT [1:40]
:INPUT ACCEPT [1:40]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

-A PREROUTING -s 1.2.3.4,5.6.7.8 -p tcp -m tcp --dport 10000 -j DNAT --to-destination 10.10.10.10:1080
-A POSTROUTING -d 10.10.10.10/32 -p tcp -m tcp --dport 1080 -j SNAT --to-source 50.50.50.50

COMMIT

*filter
:INPUT ACCEPT [15:1012]
:FORWARD ACCEPT [26:1348]
:OUTPUT ACCEPT [9:932]
COMMIT

답변1

다음은 무엇이 잘못될 수 있는지에 대한 대략적인 설명입니다.

  • 이전iptables규칙:

    X(OP의 시작 예에서는 X=2) 2^16개의 가능한 소스 포트와 1개의 대상 주소 및 포트가 있는 소스 IP 주소:

    X * 2^16개의 연결이 가능합니다.

  • iptables규칙: X개의 소스가 하나의 소스로 압축되었습니다.

    1 * 2^16개의 연결이 가능합니다.

X * 2^16 연결은 2^16 연결에만 맞도록 만들 수 없습니다. 소스 포트 충돌은 점점 더 자주 발생하기 시작하고 소스 포트를 변경하여 해결되지만 다른 흐름과 충돌하지 않는 무료 소스 포트를 찾는 것은 점점 더 어려워질 것입니다. 성능 저하가 증가하기 시작하고 패킷 삭제가 발생할 수도 있습니다.

만약에 이런 일이 다르게 일어날까요?iptables로 교체되었습니다nftables? 아니요. 두 경우 모두 충돌을 해결하는 부품이 아닙니다. 이 해결 방법은 동일한 공통 Netfilter 백엔드에서 수행됩니다.커널 nf_nat모듈, 필요한 경우 여러 번 반복하고 심지어 포기할 수도 있습니다(예: 새 항목 삭제).콘트랙항목과 임시 생성을 트리거한 패킷).

원인은 가능한 단일 대상(서버)이 있을 때 수행되는 소스 NAT입니다. 이를 피해야 합니다.

가능한 해결 방법:

  • 소스 NAT를 사용하지 마십시오. 10.10.10.10이 단일 50.50.50.50 소스를 볼 필요가 없도록 적절한 라우팅(멀티 호밍 또는 터널이 필요한 경우에도)을 대신 수행해야 합니다. 질문에서는 이 SNAT가 필요한 이유를 설명하지 않으므로 더 자세히 설명할 수 없습니다.

  • 소스 포트 압력을 로드 밸런싱하고 분산하기 위한 여러 소스 주소가 있습니다. 이는 다음을 사용하여 달성할 수 있습니다.iptables사용하여statistic여러 SNAT대상에 로드 밸런싱을 수행하는 모듈입니다.

다음으로 전환 중nftables일반적으로 개선되지만 이 경우에는 해결책이 아닌 것 같습니다.

관련 정보