TPROXY는 DNAT 포트 전달 규칙을 방해합니다.

TPROXY는 DNAT 포트 전달 규칙을 방해합니다.

특정 트래픽을 로컬 투명 프록시로 전달하기 위해 VyOS 라우터에 TPROXY를 설정하고 있습니다. 모든 DNAT 포트 전달 규칙이 더 이상 작동하지 않는다는 사실을 발견하기 전까지는 꽤 잘 작동했습니다(외부 네트워크에서 연결할 때 연결 시간 초과).

환경

  • 라우터: (프록시가 포트 10.0.0.1/24에서 실행 중이고 SO_MARK를 추가하고 있음 )12340xff
  • 내부 호스트: 10.0.0.2/24(포트는 80공개적으로 노출되어야 함)

TPROXY 규칙

ip rule add fwmark 1 table 100
ip route add local 0.0.0.0/0 dev lo table 100

nft add table myproxy
nft add chain myproxy prerouting { type filter hook prerouting priority 0 \; }
nft add rule myproxy prerouting ip daddr { 127.0.0.1/32, 224.0.0.0/4, 255.255.255.255/32 } return
nft add rule myproxy prerouting meta l4proto tcp ip daddr 10.0.0.0/24 return
nft add rule myproxy prerouting mark 0xff return
nft add rule myproxy prerouting meta l4proto { tcp, udp } mark set 1 tproxy to 127.0.0.1:1234 accept

nft add chain myproxy output { type route hook output priority 0 \; }
nft add rule myproxy output ip daddr { 127.0.0.1/32, 224.0.0.0/4, 255.255.255.255/32 } return
nft add rule myproxy output meta l4proto tcp ip daddr 10.0.0.0/24 return
nft add rule myproxy output mark 0xff return
nft add rule myproxy output meta l4proto { tcp, udp } mark set 1 accept

nft add table filter
nft add chain filter divert { type filter hook prerouting priority -150 \; }
nft add rule filter divert meta l4proto tcp socket transparent 1 meta mark set 1 accept

DNAT 규칙

$ nft 목록 테이블 nat

table ip nat {
    chain PREROUTING {
        type nat hook prerouting priority dstnat; policy accept;
        iifname "pppoe0" tcp dport { 8080 } counter packets 7 bytes 400 dnat to 10.0.0.2:80
    }
}

증상

연결 RouterPublicIP:8080시간이 초과되었습니다. 이상적으로는 트래픽을 10.0.0.2:80.

인바운드 DNAT 트래픽이 (실제 호스트 대신) 프록시로 잘못 전달된 것 같지만 10.0.0.2올바른 nft 규칙을 파악할 수 없습니다.

미리 감사드립니다!

관련 정보