포트 161에 대한 모든 연결이 다른 게이트웨이(openvpn을 통해)를 통과하고 다른 연결은 직접 연결되는 구성을 설정하려고 합니다.
[로컬호스트] -> [게이트웨이] -> [원격] - 확인
[localhost] <- [게이트웨이] <- [원격] - VPN 터널 뒤에서 패킷이 사라집니다. tun0 iface에서 냄새가 나더니 사라집니다.
내가 한 일: rt_tables에 gw1을 추가한 다음 이 규칙을 사용했습니다.
ip route add default via 10.8.0.1 dev tun0 table gw1
ip rule add fwmark 0x1 table gw1
iptables -A OUTPUT -t mangle -o eth0 -p tcp --dport 443 -j MARK --set-mark 1
iptables -A POSTROUTING -t nat -o tun0 -p tcp --dport 443 -j SNAT --to 10.8.0.2
iptables -A OUTPUT -t mangle -o eth0 -p udp --dport 161 -j MARK --set-mark 1
iptables -A POSTROUTING -t nat -o tun0 -p udp --dport 161 -j SNAT --to 10.8.0.2
그래서 저는 tcp 및 udp 연결을 테스트하고 있으며 다음과 같이 표시됩니다.
- 원격 측에서는 모든 것이 잘 작동하고 패킷이 게이트웨이 eth0으로 다시 전송됩니다.
- 게이트웨이에서 패킷은 VPN 터널(tun0)로 다시 전달됩니다.
- 패킷이 전송되는 localhost에서 패킷이 tshark의 10.8.0.2(tun0)에 도착했다가 사라지는 모습을 봅니다. 로컬 호스트는 TCP 재전송을 수행하거나 UDP 패킷을 재전송합니다.
Wireshark에서 패킷 캡처를 확인했는데 모든 포트가 정확하므로 모든 전송에 대해 동일한 임의의 동적 포트를 사용합니다. 나는 또한 성공하지 못한 채 localhost에서 SNAT 대신 가장 무도회를 사용해 보았습니다. DNAT를 사용하여 성공하지 못한 채 패킷을 127.0.0.1로 리디렉션하려고 시도했지만 확실하지 않습니다. 아마도 뭔가 잘못하고 있는 것 같습니다.
이 패킷이 tun0 이후에 사라지는 이유는 무엇입니까? 내 입력 체인은 현재 모든 것을 허용합니다. sysctl.conf에서 관심 없는 새로운 "기능"을 활성화하거나 비활성화해야 할 수도 있습니까?
감사해요
답변1
내 규칙이 맞아
해결책:
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 > $f; done
echo 1 > /proc/sys/net/ipv4/route/flush
이제 모든 것이 잘 작동합니다. 각 iface에서 이 기능을 비활성화해야 합니다. "all" 옵션은 제대로 작동하지 않습니다.