%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%8B%A4%EB%A5%B4%EC%A7%80%EB%A7%8C%20%EA%B4%80%EB%A0%A8%EB%90%9C%20%EA%B7%9C%EC%B9%99%EC%9D%84%20%EA%B5%AC%ED%98%84%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20(DNA%2B%EC%A0%84%EC%A7%84).png)
nftables
(v0.9.6)을 사용하여 방화벽 + NAT를 설정하고 있습니다. 이 도구는 광범위한 규칙 중복을 방지하기 위해 컬렉션과 매핑을 제공합니다.
공통 데이터 구조(세트 또는 맵)를 사용하여 DNAT 및 필터링 규칙(전달)을 구성하고 싶습니다.
( )하려고 하면 nft --check -f example.conf
항상 오류가 발생합니다. 이 작업을 수행할 수 있는 방법을 알고 있나요?반복할 필요 없음NAT는 2개의 데이터 구조(맵과 세트)에 매핑됩니까?
다음은 제가 사용하는 예입니다(대문자 주석 참조).
이것들은지도 및 설정:
table inet filter {
map mymap {
type inet_service : ipv4_addr
elements = {
12345 : 192.168.0.66,
4321 : 192.168.0.77
}
}
set myset {
type ipv4_addr . inet_service
elements = {
192.168.0.66 . 12345,
192.168.0.77 . 4321
}
}
이것들은규칙:
chain natprerouting {
type nat hook prerouting priority dstnat; # =-100
# ACCEPTED:
dnat ip to tcp dport map @mymap
# ERROR AT PARSING (unexpected string: @myset):
dnat ip addr . port to @myset
}
chain forward {
type filter hook forward priority filter; # =0
# ERROR AT PARSING (unexpected dport):
ip daddr tcp dport map @mymap accept
# ACCEPTED:
ip daddr . tcp dport @myset accept
}
}
dnat to
수용 가능한 경우 작동합니다.놓다. 하나 변환할 수 있어요지도가 되다놓다(혹은 그 반대로도)? 어떤 방법이 있나요?
답변1
각각의 DNATed 연결을 명시적으로 수락할 필요가 없습니다.정방향 가닥에서는 연결 추적으로 인해 DNAT가 이미 알려져 있습니다.
ct status dnat accept
다음과 같이 사용하세요.
table inet filter {
chain forward {
type filter hook forward priority filter; # =0
# THIS ONE AUTOMATICALLY ACCEPTS ALL OUR DNATed PACKETS
ct status dnat accept
}
}
일부 크레딧은 다음과 같습니다.netfilter 메일링 리스트의 Trent Buck.