프로젝트 소개
pktc는 CLI 도구이자 트리 타일링 컴파일러로, 네트워크 통신에서 기대하는 패킷 구조를 설명하면 해당하는 Linux 커널 터널 장치 구성을 자동으로 도출해줍니다.
netplan, systemd-networkd, NetworkManager와 같이 장치 유형을 먼저 정하고 파라미터를 채우는 방식과 달리, pktc는 반대 방향의 접근법을 취합니다: 사용자는 캡슐화 스택을 트리 형태로 기술하면, 도구가 이를 생성하는 데 필요한 커널 프리미티브를 결정합니다.
핵심 아이디어는 트리 타일링을 통한 명령어 선택입니다. 캡슐화 스택은 줄기(스pine)로 평면화되며, 이는 선형적인 프로토콜 계층 리스트가 됩니다. 그런 다음 장치 모양의 타일들로 덮여지게 되는데, 이 기법은 컴파일러 백엔드가 머신 명령어를 선택하는 방식과 유사하지만, 여기서는 Linux 터널 장치가 타일이고 출력 코드는 `iproute2` 명령어입니다.
지원되는 타일에는 IPIP(`ipv4 · ipv4`), GRE(`ipv4 · gre · ipv4`), GRE tap(`ipv4 · gre · ethernet`), VXLAN(`ipv4 · udp · vxlan · ethernet`) 등이 포함됩니다. 중첩된 터널은 별도의 특별한 로직 없이 여러 타일로 자연스럽게 구성됩니다.
주요 명령어:
- `pktc lower`: 장치를 생성하기 위한 `ip link` / `ip addr` 명령어 출력
- `pktc mirror`: 원격 측의 대칭 설정 출력
- `pktc expect`: 검증을 위한 하위 레벨 트래픽 형식 출력
- `pktc parse`: 설명 파일로부터 캡슐화 스파인 출력
독특한 기능으로는 루프 종료 테스트 모드가 있습니다: `make netns`는 veth 쌍에 두 개의 네트워크 네임스페이스를 구성하고, 동일한 설명으로 양쪽을 설정한 후 트래픽을 전송하고 하위 레벨을 캡처합니다. 골든 테스트는 의도된 명령어가 올바르게 출력되었는지를 증명하고, 커널 테스트는 장치가 생성되었는지를 확인하며, 캡처는 트리가 주장한 대로 장치가 작동하는지를 보여줍니다.
`go install github.com/vinodhalaharvi/pktc/cmd/pktc@latest`로 설치하거나 소스에서 `make check`, `make demo`, `make netns`로 빌드할 수 있습니다.
이 프로젝트는 초기 단계로, 현재 4개의 타일과 1개의 백엔드만 지원합니다. Geneve, VLAN, XFRM, WireGuard는 개발 당시 커널 모듈이 사용 불가능했기 때문에 의도적으로 제외되었습니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.