사용자 프로그램에서 TUN / TAP 터널을 활용하는 방법은 무엇입니까?


9

최근에 Linux TUN / TAP 인터페이스가 있음을 발견했지만 여전히 이해하려고합니다. 기본 개념을 얻습니다. 의사 장치는 네트워크 인터페이스를 에뮬레이트하고 데이터를 하드웨어로 전달하는 대신 사용자 공간 프로그램으로 전달하는 것으로 만들어졌습니다.

이 터널을 활용하도록 관련없는 프로그램을 어떻게 지시 하시겠습니까?

예를 들어 터널을 만들기 전에 내 시스템에는 eth0 및 lo, 일반 이더넷 인터페이스 (로컬 네트워크에 연결됨) 및 루프백 인터페이스 만 포함됩니다. 프로그램이 터널을 생성하고 구성한 후 로컬 인터페이스에 있지만 사용하지 않는 IP 주소를 제공 한 새로운 인터페이스 gr0이 생겼습니다 (따라서 모두 동일한 서브넷에 있음). 관련없는 프로그램이이 '터널'을 활용하도록하려면 어떻게해야합니까? TCP 연결을 사용하는 클라이언트 / 서버 앱을 전달하는 간단한 Python 메시지가 있다고 가정하면 어떻게 터널을 사용하도록 구성 할 수 있습니까?

기본적으로 빠진 것이 있으면 사과하지만 평소처럼 나는 사물의 계획에서 혼란스러워했습니다. 다시 말하지만,이 터널을 사용하는 간단한 TCP 프로그램을 갖기 만하면됩니다.

감사!

답변:


7

항상 "터널"은 아닙니다. TUN / TAP은 특정 NIC 드라이버입니다. 네트워크 스택의 관점에서 이들은 다른 네트워크 인터페이스처럼 작동합니다. IP 주소를 가질 수 있고, 지점 간 또는 브로드 캐스트 인터페이스 일 수 있습니다. 라우팅 규칙도 적용됩니다. 그러나 해당 네트워크 인터페이스 중 하나에 기록되는 모든 트래픽은 처리를 위해 일부 사용자 공간 프로그램으로 이동하고 사용자 공간 프로그램이 직접 기록한 모든 데이터 /dev/tunX는 네트워크 스택의 수신 패킷처럼 보입니다.

일반적인 터널링 설정 서버와 클라이언트에는 주소가 할당 된 TUN 장치가 있습니다. 둘 다에 구성된 라우팅 테이블은 필요한 트래픽을이 TUN 장치로 보냅니다. 패킷이 tun0으로 라우팅되면 커널은 TCP 연결 등을 통해이 패킷을 원격 시스템 (서버)의 다른 프로그램으로 보내는 사용자 공간 프로그램 (클라이언트)으로 보냅니다. 원격 시스템에서 다른 프로그램 (서버)은 클라이언트에서 패킷을 받아 자체 /dev/tunX장치에 기록하여 해당 패킷을 네트워크 스택에 "주입"합니다. 그리고 터널링 된 패킷은 다른 것으로 처리됩니다.


1
따라서 대답은 (내 목적을 위해) 트래픽을 이러한 인터페이스로 보내도록 라우팅 테이블을 구성하는 것입니다. 그것이 내가 놓친 요점이지만 이제는 해결책을 찾을 수 있어야합니다. 또한 설명이 명확 해 지므로 설명에 감사드립니다. 감사!
Mr. Shickadance

2
"route add <TUN IP ADDR> dev gr0"을 사용했습니다. 이를 통해 새로운 인터페이스를 통해 트래픽을 리디렉션 할 수있었습니다. 다시 감사합니다!
Mr. Shickadance
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.