diff options
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 87 |
1 files changed, 45 insertions, 42 deletions
@@ -1,70 +1,73 @@ -## 功能 +# PacketAdapter -- Packet Filtering & Adaptation tools -并联环境下实现GTP路由封堵功能。 +## 简介 -**实现** +PacketAdapter 是一个基于 iptables 的数据包过滤,转换/适配工具。 +PacketAdapter 并不会凭空产生数据包,而是将 iptables 过滤的数据包重新转换/适配后再回注到网络中。 +可用于 Overlay networks 中 Packet encapsulation and decapsulation,屏蔽端到端协议层之间的差异。 -将 “=> MAC => IPv4/IPv6 => UDP => GTP1 => IPv4/IPv6 => TCP/UDP“ 中的 "IPv4/IPv6 => UDP => GTP1" 协议层剥离。 +## 应用 -- 实现 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" 协议层剥离。 -原数据包为: - -``` shel -Frame 1: 90 bytes on wire (720 bits), 90 bytes captured (720 bits) -Ethernet II, Src: JuniperN_4d:d3:51 (08:81:f4:4d:d3:51), Dst: c8:67:d9:18:80:c3 (c8:67:d9:18:80:c3) -Internet Protocol Version 4, Src: 10.166.20.10, Dst: 10.2.3.35 -User Datagram Protocol, Src Port: 2152, Dst Port: 2152 -GPRS Tunneling Protocol -Internet Protocol Version 4, Src: 10.58.121.62, Dst: 217.76.78.112 -Transmission Control Protocol, Src Port: 52144, Dst Port: 443, Seq: 1, Ack: 1, Len: 0 ``` - -经过 NFQ 过滤后变为: - -``` shel -Frame 1: 90 bytes on wire (720 bits), 90 bytes captured (720 bits) -Ethernet II, Src: JuniperN_4d:d3:51 (08:81:f4:4d:d3:51), Dst: c8:67:d9:18:80:c3 (c8:67:d9:18:80:c3) -Internet Protocol Version 4, Src: 10.58.121.62, Dst: 217.76.78.112 -Transmission Control Protocol, Src Port: 52144, Dst Port: 443, Seq: 1, Ack: 1, Len: 0 ++-----------+ +-----------+ +| 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 +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/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/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 +# /usr/sbin/iptables -A OUTPUT -o eno2 -j LOG +# /usr/sbin/ip6tables -A OUTPUT -o eno2 -j LOG -# make -yum install -y libnetfilter_queue-devel -make -./nfq_filter_gtp +# 启动服务 +systemctl enable nfq_filter_gtp +systemctl start nfq_filter_gtp ``` -## 局限 - -/MAC/IPv6 的 first next header 必须为 UDP,否则跳过。 - ## TODO -// support service -// support filestat +* support service +* support filestat
\ No newline at end of file |
