TUN 인터페이스를 통해 모든 트래픽 라우팅

TUN 인터페이스를 통해 모든 트래픽 라우팅

모든 트래픽이 인터페이스를 통과하길 원합니다 TUN.

다음은 순서도입니다.

따라서 보시다시피 트래픽은 모든 프로그램의 주소 TUN에 있는 iface 로 라우팅됩니다. 10.0.0.1그런 다음 에 첨부된 프로그램이 TUN패킷에 대해 작업을 수행한 다음 에 있는 내 라우터로 전송됩니다 192.168.1.1. 그런 다음 인터넷을 통해 라우팅됩니다(예를 들어 내 프록시 서버로 라우팅되지만 실제로 내 문제에는 그다지 중요하지 않습니다).

그래서 내 목표는 다음과 같은 방식으로 트래픽을 라우팅하는 것입니다. $any_program<--> tunX<--> 192.168.1.1 (the router)( <-->트래픽이 들어오고 나가는 것을 의미합니다).

지금까지 내가 한 일:

  1. 먼저 tunX다음 기능을 사용하여 장치를 초기화했습니다.
int tun_open(char *device)
{
    struct ifreq ifr;
    int fd, err;
    
    fd = open("/dev/net/tun", O_RDWR);
    if (fd == -1)
    {
        perror("opening /dev/net/tun");
        exit(1);
    }

    memset(&ifr, 0, sizeof (ifr));
    ifr.ifr_flags = IFF_TUN;
    strncpy(ifr.ifr_ifrn.ifrn_name, device, IFNAMSIZ);
    
    err = ioctl(fd, TUNSETIFF, (void *) &ifr);
    if (err == -1)
    {
        perror("ioctl TUNSETIFF");
        close(fd);
        exit(1);
    }

    return fd;
}

그런 다음:

tunfd = tun_open("tun6");

또한 다음을 활성화했습니다 TUNSETPERSIST.

ioctl(tunfd, TUNSETPERSIST, 1) < 0);
  1. 그런 다음 다음 명령을 사용하여 장치를 설정했습니다.
$ sudo ip addr add 10.0.0.1/24 dev tun6
$ sudo ip link set tun6 up                                                 

프로그램은 tunfd내용을 읽고 출력합니다. 지금까지 읽은 유일한 내용은 다음과 같습니다.

:B\{k
HOST: 239.255.255.250:1900
MAN: "ssdp:discover" 
MX: 1
ST: urn:dial-multiscreen-org:service:dial:1
USER-AGENT: Google Chrome/86.0.4240.198 Linux

%   N%*.%K%M%P%M%M%M%HP%,%M%*K%(aP%>O%M%LqP%@K%`P%P%Ҵ u@=U繤湤}=UoK%0=U

SSDP:발견? 이것이 내 tun 인터페이스를 통과하는 이유는 무엇입니까?

출력 route -n:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    600    0        0 wlp2s0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun6
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 wlp2s0
192.168.1.0     0.0.0.0         255.255.255.0   U     600    0        0 wlp2s0

iptables나는 여러 가지 프로그램을 가지고 놀았 ip route지만 이 모든 것에는 초보자입니다. 내가 이해하는 한, iptables실제로 패킷을 라우팅하는 것이 아니라 필터링합니다(매우 틀릴 수 있음). 그렇다면 패킷을 라우팅하는 방법이 있습니까 ip route?

답변1

일반 라우팅은 인터페이스가 아닌 대상을 기반으로 하므로(정책 기반 라우팅을 구성하지 않는 한) 모든 아웃바운드 트래픽을 네트워크로 라우팅해야 합니다 10.0.0.0/24.

ip route del default
ip route add default via 10.0.0.254

실제로 어떤 주소를 통해 보내는지는 중요하지 않습니다. 10.0.0.0/24프로그램에 도달해야 합니다.

관련 정보