라우터가 있습니다. 여러 인터페이스가 있습니다. 그 중 하나는 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입니다.
무엇을 제공합니까?