내 컴퓨터의 물리적 인터페이스에 대한 tun 장치 인터페이스를 생성하기 위해 C 프로그램을 작성하려고 합니다. 전체적인 아이디어는 터널 장치에 원시 패킷을 작성할 때 이를 실제 물리적 인터페이스에 넣는 것입니다. 내 질문은 tun 장치를 실제 물리적 인터페이스에 어떻게 매핑합니까?
예를 들어 내 eth1의 IP 주소는 - 10.16.1.152입니다. eth1 인터페이스에서 읽고 쓸 수 있도록 tun 장치를 어떻게 생성합니까? 동일한 IP 주소를 제공해야 합니까, 아니면 다른 IP 주소를 제공해야 합니까? 이는 tun 장치에 패킷을 쓰고 tun 장치의 기본 게이트웨이를 phy 장치로 사용하는 경로를 생성할 수 있는 유일한 방법입니다.
나는 팔로우하고 있다이 예, 하지만 아직 개념이 명확하지 않습니다.
다음 명령을 사용하여 터널 장치를 만들었습니다. 내 컴퓨터에는 실제 이더넷 포트가 있습니다. 이 이더넷 인터페이스 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 패킷이 수신되지 않습니다. 그래서 내 터널이 패킷을 수신하지 못하는 것 같습니다.
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
, 인터페이스도 패킷 소켓도 실제로 필요한 것이 아닐 수도 있습니다 .