# PacketAdapter -- Packet Filtering & Adaptation tools ## 简介 - PacketAdapter 是一个基于 iptables 的数据包过滤,转换/适配工具。 - PacketAdapter 并不会凭空产生数据包,而是将 iptables 过滤的数据包重新转换/适配后再回注到网络中。 - 可用于 Overlay networks 中 Packet encapsulation and decapsulation,屏蔽端到端协议层之间的差异。 ## 应用 -- 实现 GTP Overlay 数据包的解封装 PacketAdapter 通过 iptables 将 Firewall 发送的 GTP RST 包进行过滤,然后将 GTP 数据解封装后回注到网络中。 例如:将 “MAC/IPv4 or IPv6/UDP/GTP1/IPv4 or IPv6/TCP or UDP“ 中的 "/IPv4 or IPv6/UDP/GTP1" 协议层剥离。 ``` +-----------+ +-----------+ | TCP/UDP | | TCP/UDP | +-----------+ +-----------+ | IPv4/IPv6 | | IPv4/IPv6 | +-----------+ +-----------+ | GTP1 | | | +-----------+ | | | UDP | ==> | | +-----------+ | | | IPv4/IPv6 | | | +-----------+ | | | MAC | | MAC | +-----------+ +-----------+ ``` 注意: * /MAC/IPv6 的 first next header 必须为 UDP。 * 目前不支持 GTP 扩展头。 ## 运行环境 ``` shell # yum install --downloadonly --downloaddir=./ libnetfilter_queue.x86_64 # yum install --downloadonly --downloaddir=./ libnetfilter_queue-devel.x86_64 # 安装 libnetfilter_queue yum install -y libnetfilter_queue # 清空 iptables iptables -F -t nat iptables -F -t filter iptables -F -t mangle iptables -F -t raw ip6tables -F -t nat ip6tables -F -t filter ip6tables -F -t mangle ip6tables -F -t raw # 增加 iptables /usr/sbin/iptables -A OUTPUT -o eno2 -p udp --dport 2152 -j NFQUEUE --queue-num 1 /usr/sbin/ip6tables -A OUTPUT -o eno2 -p udp --dport 2152 -j NFQUEUE --queue-num 1 # 删除 iptables /usr/sbin/iptables -D OUTPUT -o eno2 -p udp --dport 2152 -j NFQUEUE --queue-num 1 /usr/sbin/ip6tables -D OUTPUT -o eno2 -p udp --dport 2152 -j NFQUEUE --queue-num 1 # 调试 iptables # /usr/sbin/iptables -A OUTPUT -o eno2 -j LOG # /usr/sbin/ip6tables -A OUTPUT -o eno2 -j LOG # 启动服务 systemctl enable nfq_filter_gtp systemctl start nfq_filter_gtp ``` ## TODO - [x] support service - [ ] support filestat