port
에 ipv4_addr:port
매핑 port
되고 ipv4_addr:port
다른 TCP 포트 번호를 갖는 nftables 맵을 가질 수 있습니까 ? 예를 들어, 포트 80에서 들어오는 모든 패킷을 포트 8080에서 웹 서버를 실행하는 컨테이너로 전송하려고 합니다(순전히 nftables 사용). 이는 아래와 같이 두 개의 맵과 두 개의 맵 조회를 사용하여 달성할 수 있습니다.
table ip dnatTable {
chain dnatChain {
type nat hook prerouting priority dstnat; policy accept;
dnat to tcp dport map { 80 : 172.17.0.3 }:tcp dport map { 80 : 8080 }
}
}
그런데 지도 조회를 한 번만 할 수 있는지 궁금합니다.
감사해요
답변1
평소처럼nftables움직이는 표적이다. 이 기능은 다음에서 나타납니다.nftables0.9.42020-04-01에 게시됨:
연결된 NAT 매핑을 사용합니다. 이를 통해 예를 들어 NAT 수정에 사용할 주소와 포트를 맵에서 지정할 수 있습니다.
nft add rule ip nat pre dnat ip addr . port to ip saddr map { 1.1.1.1 : 2.2.2.2 . 30 }
명명된 세트와 함께 이 새로운 기능을 사용할 수도 있습니다.
nft add map ip nat destinations { type ipv4_addr . inet_service : ipv4_addr . inet_service \; } nft add rule ip nat pre dnat ip addr . port to ip saddr . tcp dport map @destinations
따라서 OP의 경우 다음과 같습니다.
nft add ip dnatTable dnatChain 'dnat ip addr . port to tcp dport map { 80 : 172.17.0.3 . 8080 }'
참고용으로만,nftables1.0.0 2021년 8월 19일 출시단순화된 구문이 있습니다.
- NAT 매핑을 위한 단순화된 구문입니다. IP 범위를 지정할 수 있습니다.
[...]
또는 특정 IP 및 포트.
... dnat to ip saddr map { 10.141.11.4 : 192.168.2.3 . 80 }
따라서 OP의 상황은 다음과 같이 단축될 수 있습니다(이전 규칙은 다음과 같이 표시됨).
nft add ip dnatTable dnatChain 'dnat to tcp dport map { 80 : 172.17.0.3 . 8080 }'
명명된 맵을 사용하면 데이터에서 규칙을 분리하는 데 도움이 됩니다. 이것은 또한 작동합니다(0.9.4 구문 사용).
nft add map ip dnatTable portToIpPort '{ type inet_service : ipv4_addr . inet_service ; }'
nft add rule ip dnatTable dnatChain dnat ip addr . port to tcp dport map @portToIpPort
그런 다음 편리한 시간에 다음을 수행하십시오.
nft add element ip dnatTable portToIpPort '{ 80 : 172.17.0.3 . 8080 }'