라우터가 있습니다. 몇 가지 인터페이스가 있습니다. 그 중 하나는 vpn0이라는 VPN이고, 하나는 out0이라는 물리적 인터페이스에 대한 기본 경로이며, 입력 인터페이스 in0입니다.
대상 포트가 993인 in0의 패킷은 절대로 out0에 배치되지 않습니다. 나는 패킷을 다음과 같이 표시하여 이를 수행합니다.
iptables -t mangle -A PREROUTING -i in0 -p tcp --dport 993 -j MASK --set-mark 100
iptables -t mangle -A PREROUTING -i in0 -p tcp --dport 993 -j CONNMARK --save-mark
out0에서 전달을 비활성화하려면 다음을 수행합니다.
iptables -A FORWARD -i in0 ! -o vpn0 --match-mark 100 -j DROP -m conntrack --ctstate NEW
내가 겪고 있는 문제는 호스트에서 나오는 출력 패킷에 있습니다. vpn0에서 패킷을 엉망으로 만들기 위해 다음 규칙이 있습니다.
iptables -t mangle -A OUTPUT --protocol tcp --dport 993 --jump MARK --set-mark 100
iptables -t mangle -A OUTPUT --protocol tcp --dport 993 --jump CONNMARK --save-mark
iptables -t mangle -A OUTPUT --protocol tcp --dport 993 --jump RETURN
꽤 잘 작동합니다. vpn0이 작동하지 않을 때만 발생합니다. 규칙을 추가해 보았습니다.
iptables -A OUTPUT --protocol tcp --dport 993 -o out0 --match mark --mark 100 --jump DROP -m conntrack --ctstate NEW
하지만 이는 VPN에서 나오는 패킷을 삭제합니다. DROP을 LOG로 변경하여 이를 확인했는데 출력 인터페이스가 vpn0이 아닌 out0입니다.
무엇을 제공합니까?