
나는 ubuntu 20 시스템을 가지고 있고 내 클라이언트 시스템이 들어오고 나가는 TCP 트래픽을 가질 수 없기 때문에 내 시스템과 원격 서버 사이에 터널을 만들려고 합니다.
tun0 가상 인터페이스를 만들었고 TCP 패킷만 해당 인터페이스로 라우팅되기를 원합니다. 그러면 내 프로그램이 패킷을 읽고 패킷을 다른 프로토콜(예: DNS)로 래핑하여 터널 끝점으로 보낼 수 있습니다.
이미 내 컴퓨터에서 인터페이스로 모든 트래픽을 라우팅하는 데 성공했지만 이렇게 하면 내 시스템이 TCP와 관련되지 않은 다른 트래픽(예: 내 라우터 또는 google.com에 대한 ping 실행)을 수행하지 못하게 됩니다.
내가 사용한 규칙:
sudo ip route del default
sudo ip route add default via 10.1.0.1 dev tun0
sudo ip route add 192.168.1.127 via 192.168.1.1 dev ens33
192.168.1.1은 내 기본 gw이고 10.1.0.1은 내 tun0 IP이고 192.168.1.127은 내 서버 IP입니다.
TCP 트래픽만 라우팅하려면 어떻게 해야 합니까?
답변1
나는 다른 라우팅 테이블을 사용하고 해당 테이블을 사용하여 라우팅될 특정 패킷을 표시함으로써 이를 달성했습니다.
내 tun 인터페이스의 IP에 대한 기본 경로를 생성하려면:
ip route add default via 10.0.0.1 table 3
나가는 TCP 패킷을 표시하려면:
iptables -t mangle -A OUTPUT -p tcp -j MARK --set-mark 2
마지막으로 이러한 패킷이 표시된 패킷을 전달하는 IP 규칙인 표 3을 사용하여 라우팅되는지 확인합니다.
ip rule add fwmark 2 table 3