실제 물리적 네트워크 인터페이스에 대한 Tun 장치를 어떻게 생성합니까?

실제 물리적 네트워크 인터페이스에 대한 Tun 장치를 어떻게 생성합니까?

내 PC 물리적 인터페이스에 대한 tun 장치 인터페이스를 생성하는 C 프로그램을 만들려고 합니다. 전체 아이디어는 터널 장치에 원시 패킷을 작성할 때 이를 실제 물리적 인터페이스에 저장한다는 것입니다. 내 질문은 tun 장치를 실제 물리적 인터페이스와 어떻게 매핑합니까?

예를 들어, 내 eth1의 IP 주소는 10.16.1.152입니다. eth1 인터페이스에서 읽고 쓸 수 있도록 tun 장치를 어떻게 생성합니까? 동일한 IP 주소를 제공해야 합니까, 아니면 다른 IP 주소를 제공해야 합니까? 경로는 tun 장치에 패킷을 쓰고 tun 장치의 기본 게이트웨이를 phy 장치로 갖는 경로를 생성하는 유일한 방법입니다.

나는 팔로우하고 있다이 예, 하지만 아직 개념이 확실하지 않습니다.

다음 명령을 사용하여 터널 장치를 만들었습니다. 내 PC에는 하나의 실제 이더넷 인터페이스가 있습니다. 이 이더넷 인터페이스 IP 주소 10.16.1.152는 여러 대의 PC에 연결된 다음 게이트웨이 서버에 연결되어 인터넷에 액세스합니다.

인터페이스에 OSPF hello 패킷을 쓰는 C 프로그램을 만들려고 합니다.

그러기 위해 OSPF hello 패킷을 쓸 수 있도록 터널 장치를 생성하고 있습니다. 하지만 그 전에 터널 장치를 확인하고 있습니다. 여기서 내 터널 장치는 11.11.11.2/24이고 경로는 10.16.1.152로 설정됩니다. 제가 이해한 바에 따르면 실제 인터페이스(예: 10.16.1.152)에서 수신되거나 전송된 모든 패킷은 IP 주소가 11.11.11.2인 이 터널 장치 인터페이스에서 수신됩니다. 그런데 10.16.1.152로 ping을 했더니 수신된 RX/Tx 패킷이 여전히 0입니다. 그래서 내 터널이 패킷을 수신하지 못하는 것 같습니다.

ip tuntap add mode tun dev tun0
ip addr add 11.11.11.2/24 dev tun0
ip link set dev tun0 up
ip route get 10.16.1.152

여기에 이미지 설명을 입력하세요

여기에 이미지 설명을 입력하세요

여기에 어떤 개념이 빠져 있습니까? 어떻게 해야 합니까? 나는 여전히 터널 장치 개념을 명확하게 이해하는 데 어려움을 겪고 있습니다.

답변1

tun"기존 인터페이스에 실제 패킷을 넣기" 위해 인터페이스를 사용할 수 없습니다 . 인터페이스 tun는 항상 기존의 모든 인터페이스와는 다른 새로운 네트워크 인터페이스입니다.

하지만 당신은 사용할 수 있습니다패킷 소켓기존 네트워크 인터페이스에 원시 패킷을 쓰거나 기존 네트워크 인터페이스에서 원시 패킷을 읽습니다. 자세한 내용은 참조하세요 man 7 packet. 하지만 이를 통해 모든 프로토콜 계층을 우회하므로 올바른 프로토콜 동작을 직접 구현해야 합니다.정말네가 무슨 짓을 하는지 알아, 이러지 마.

당신은 실제로 달성하고 싶은 것이 무엇인지 말하지 않았고 개념에 대해 약간 혼란스러워하는 것 같습니다.XY 문제tun, 인터페이스도 패킷 소켓도 실제로 필요한 것이 아닐 수도 있습니다 .

관련 정보