- 博客(786)
- 资源 (5)
- 收藏
- 关注
原创 Snort预处理器frag3
frag3预处理器负责对IP分片报文进行重组。配置文件/etc/snort/snort.conf中关于frag3的配置如下。其中,全局配frag3_global设置最大的分片数量为65536。引擎frag3_engine配置了策略policy使用windows,重组过程中检测异常detect_anomalies,一个完整报文的分片重叠限制在10个,最小的分片长度为100,分片最长生存期为180秒。
2025-01-12 19:58:27
316
原创 strongswan测试证书生成
环境如下生成证书的目录及证书文件。strongswan的证书位于目录CA_DIR:testing/hosts/winnetou/etc/ca/。以下定义全局变量,包括:CA私钥CA_KEY,CA证书CA_CERT,CA的证书吊销列表CA_CRL,CA的证书吊销列表分发点CA_CDP(CRL Distribution Point),CA在线证书状态协议的地址CA_OSCP(Online Certificate Status Protocol)。证书时间变量,之后生成证书是需要使用。
2024-12-22 23:55:05
610
原创 strongswan构建测试环境
make-testing脚本文件负责构建strongswan的虚拟化测试系统。位于目录strongswan-5.9.14/testing/,需要以管理员身份运行make-testing。生成测试用到的虚拟客户机镜像,KVM虚拟机和虚拟网络的配置文件位于目录:config/kvm。执行testing/start-testing脚本启动测试环境,查看运行起来的虚拟机。
2024-12-15 21:21:27
1164
原创 VPP多架构处理器支持
对于转发层面的关键节点(node),VPP针对处理器架构编译多份代码,在运行时检测处理器架构,动态确定使用的代码分支。VPP提供两种对多处理器架构的支持,除了节点函数外,还可指定任意函数支持多架构。
2024-12-01 20:21:38
1239
原创 strongswan测试流程
测试shell脚本文件testing/do-tests,测试配置文件testing/testing.conf。do-tests脚本不加参数,将依次执行testing/tests/目录下的所有测试用例。do-tests脚本有两个参数-v和-t,前者在测试中记录详细信息,后者在输出信息中增加时间戳。另外,可以指定单个或者多个测试用例来执行。
2024-11-24 23:20:22
890
原创 VICI接口协议
VICI全称Versatile IKE Control Interface,strongswan的vici插件实现了IPC协议的服务端,其可用来配置,监视和控制IKE守护进程charon。它使用请求(request)、响应(response)和事件(event)三类消息,底层依赖于可靠的基于流的传输层。
2024-11-10 23:22:10
1023
原创 strongswan链表结构
链表结构定义如下,public成员为公共的方法,count,first和last为私有成员,count表示链表中元素的数量,first和last分别指向链表的头和尾。public(linked_list_t结构)定义了一系列操作链表的方法,其必须为第一个结构成员,方便在公共方法和私有结构间转换。如下函数创建通用的链表元素结构。
2024-11-03 19:39:12
829
原创 strongswan中METHOD定义
strongswan中使用METHOD来定义函数(方法),如下get_first函数定义。METHOD宏各个参数的说明以及对应于的get_first函数的各个参数如下。METHOD宏重新布局如下。其由三部分组成,第一部分为函数声明,首个参数为transparent_union属性修饰的联合体,联合体内容为对应结构(如linked_list_t)的公共和私有结构体;METHOD定义的函数为静态,文件内部使用时首个参数为私有结构体,如private_linked_list_t。
2024-11-03 18:45:00
501
原创 Cisco ASAv虚拟防火墙
配置如下,主要是三个方面,配置管理口地址模式DHCP,配置安全级别;第二,开启http服务器,配置允许访问主机的网段和接口;修改ASDM快捷方式,点击属性,将目标修改为:C:\Windows\System32\wscript.exe invisible.vbs run.bat。浏览器访问ASAv管理地址,如下下载cisco asdm的界面,以上配置显示中可见asdm镜像为:asdm-openjre-7202.bin。下载安装ASDM-7.20(2),其包含openjre,不需要在另外安装。
2024-10-26 20:22:50
449
原创 openssl签名报错
从内核4.8(DEVRANDOM_SAFE_KERNEL)开始,当/dev/random(DEVRANDOM_WAIT)可读时,不确保设备/dev/urandom被正确的Seed。出现问题的系统使用的内核为3.10,但是uname系统调用获取到的内核版本为5.16,导致了问题的产生。将程序与openssl库做静态链接,放到其它机器上运行一切正常,排除了openssl库的问题,应当是系统问题。否则,检查/dev/random是否可读,来判断/dev/urandom是否正确的Seed。
2024-10-20 19:45:00
564
原创 EVE-NG防火墙镜像
如下图所示,用到的虚拟防火墙有Checkpoint,cisco,fortinet,Paloalto,hillstone,H3C和Huawei几个品牌。
2024-07-28 17:45:00
1892
1
原创 Trex测试仪使用
公司测试仪器紧张,打算安装Trex做简单的测试。如下下载最新的trex工程。解压,得到版本v3.04。运行脚本dpdk_setup_ports.py,配置trex使用的网卡。需要配置偶数的接口数量,可以使用ID,PCI地址或者linux接口名称来指定trex使用的接口。这里根据ID,指定ID为4和5的接口,即linux接口enp7s0和enp8s0。脚本默认配置两个接口为回环模式。先都采用默认的配置,稍后在修改。配置完之后,预览配置内容如下,保存到/etc/trex_cfg.yaml。对应的拓扑如下图。
2024-06-23 20:56:16
500
翻译 cjdns whitepaper
互联网一个更技术性的问题,也是很多人都没有意识到的,是地址空间的碎片化。每台连接到互联网的计算机都需要一个地址,作为唯一标识它的数字,发送到这台计算机的每条数据上都附有此地址。在其互联网路径上的每一站,路由器都会检查报文(数据单元)的地址字段,以决定它可以在哪条线路上发送数据包。如果地址是大块的,路由器会更容易快速的查找报文中地址字段的前几个字节,然后知道,例如,它的目的地是中国的某个地方,虽然不准确,但足以知道该使用哪根线路发送。
2024-06-09 21:26:04
172
原创 VPP FIB路径链表环路检查
在添加新的路径时需要进行路径环路检查。函数fib_path_list_recursive_loop_detect会被反复调用。
2024-05-26 21:13:35
548
原创 libnl-3.6.0库问题
在函数parse_multipath中,使用_nl_auto_rtnl_nexthop宏修饰了变量nh,导致nh的作用范围结束时,其被释放。其中fcn函数由宏定义_NL_AUTO_DEFINE_FCN_TYPED0确定,函数名为_nl_auto_rtnl_nexthop_fcn,函数体判断rtnl_nexthop类型变量是否有值,调用函数rtnl_route_nh_free将其空间释放。宏定义_nl_steal_pointer的参数pp为nh的地址,以下将nh的值赋给了_p,作为宏的返回值,继续使用。
2024-05-18 22:16:42
277
原创 VPP IPv6-IPSec手动隧道保护IPv4流量
手动创建IPv6 IPSec隧道,参见FDIO官方文档:https://wiki.fd.io/view/VPP/IPSec_and_IKEv2, 以下做了修改以便在一台ubuntu设备上运行,以及修复一些测试中的问题和命令修正。以下命令配置网络拓扑中的veth接口对,以及创建两个网络命名空间clientns和serverns。配置两个网络命名空间中的接口IP地址和路由。
2024-04-28 21:18:02
904
原创 VPP IKEv2隧道示例
在安装Ubuntu 22.04.04系统的虚拟机上实现。依据fd.io官网的IKEv2文档:https://s3-docs.fd.io/vpp/22.10/usecases/ikev2/2_vpp.html。将两个VPP实例通过IPSec隧道连接。安装VPP版本23.10。
2024-04-20 19:15:00
1000
原创 VPP添加接口IP地址
如下命令添加接口IPv4地址。配置IP地址由函数ip4_add_del_interface_address_internal处理,主要参数为接口索引,IPv4地址和掩码长度(address_length)。
2024-03-31 20:52:54
957
原创 VPP FIB表项信息
如下命令,VPP配置了接口eth11和eth13的IP地址,分别为17.1.1.1/16和18.1.1.1/16。命令show fib entry显示以上接口对应的fib表项。接口eth11对应4个FIB表项,对应的前缀分别为:17.1.0.0/16,17.1.0.0/32,17.1.255.255/32和17.1.1.1/32。接口eth13对应4个FIB表项。对应的前缀分别为:18.1.0.0/16,18.1.0.0/32,18.1.255.255/32和18.1.1.1/32。
2024-03-10 22:57:51
1393
原创 VPP接口二层互联xconnect
以下命令将接口设置为L2二层互联模式,如果要双向流量,需要两个口都设置成此模式。一个接口上接收到的报文将发送到另外一个接口,反之亦然。
2024-01-28 22:11:41
1371
原创 NAT44-ED features及节点图
VPP配置SNAT,内网接口GigabitEthernet2/0/0,外网接口GigabitEthernet3/0/0,NAT之后的地址为GigabitEthernet3/0/0接口的地址。NAT44-ED插件使用的feature和node节点如下。nat44-ed处理节点流程如下。VPP配置了多个worker线程的话,需要nat44-in2out-worker-handoff和nat44-out2in-worker-handoff节点;
2024-01-21 20:02:36
1410
原创 NAT44-ED会话与处理线程
NAT44-ED流表使用bihash创建,bihash类型为16_8,即16字节的key值和8字节的value值。默认情况下每个线程的会话数量为63K。bihash的哈希桶数量默认为32768。bihash哈希桶translation_buckets的值要求为2的幂,以下函数根据63K流表项,计算buckets值。
2024-01-14 22:28:12
1174
原创 自适应节点调度模式
节点模式调节的基础是VPP主循环执行的次数,即main_loop_count的值。每次主循环执行,都调用以上函数,递增main_loop_count的计数。
2024-01-06 20:56:51
526
原创 VPP节点统计信息
节点的统计位于函数dispatch_node函数中,节点处理函数运行之后(node->function)返回值为处理的报文数量n(n_vectors),通过函数vlib_node_runtime_update_stats来更新节点的相关统计信息。三种统计维度:调用次数、报文数量和时间,对应以上的参数n_calls=1,n_vectors=n和n_clocks=t - last_time_stamp。将node中的三个记录统计信息的成员分别累加上对应的值。
2023-11-12 21:27:52
924
原创 VPP ARC和feature初始化
遍历feature_main主结构的next_arc单向链表,按照顺序为每个ARC注册结构分配索引(feature_arc_index),如果注册ARC的时候为成员arc_index_ptr附了值,将ARC索引写入此值。将arc_name作为key,areg注册结构为value,写入arc_index_by_name的哈希中,方便之后查找。计算ARC中开始节点的数量,递增ARC索引,遍历下一个ARC注册结构。按照最大的ARC索引值,分配以下的向量。
2023-09-24 21:33:40
836
原创 VPP以太网接口模式
以太网接口结构ethernet_interface_t如下,其成员flags为32bit,高16bit为运行状态标志,低16bit为操作标志。最低bit位表示接口的L2/L3模式设置。第16bit为1表示接口运行在L3模式。物理接口在注册时,例如在VPP插件DPDK中,以太网接口结构成员flags没有进行赋值。函数ethernet_set_flags设置flags的值。
2023-09-10 21:51:28
535
原创 VPP以太网节点vlib_buffer_t初始优化
flags字段当前只关心VNET_BUFFER_F_L2_HDR_OFFSET_VALID和VNET_BUFFER_F_L3_HDR_OFFSET_VALID两个标志,以下将会用到,与结构vnet_buffer_opaque_t相关,前者表示成员l2_hdr_offset是有效的,后者表示l3_hdr_offset是有效的。current_data在vlib_buffer_t结构中的偏移为0,current_length的偏移为2,flags的偏移为4。或操作仅对buffer结构的flags赋值。
2023-08-19 19:15:00
633
原创 内核inet_peer及限速
inet_peer为内核中的其它系统提供对通信另一端相关信息的存储功能。peers按照红黑树结构组织,相比于hash结构,可以避免在受到DDOS攻击时,发生哈希冲突,单个哈希值冲突链表过长,导致查询时长增加的问题。inet_peer支持IPv4和IPv6,红黑树的键值为IPv4或者IPv6的地址值。
2023-08-13 22:22:35
306
原创 LinuxCP插件virtio与内核vhost
以下为LCP创建的接口对,VPP侧为物理接口port7,映射到Linux侧的为虚拟接口hostap1,接口hostap1作为vhost的后端存在。VPP侧接口tap1为前端的virtio接口。以下内容分三个部分:virtio/vhost相关初始化,发送和接收流程。
2023-07-09 18:15:00
829
原创 shufti匹配
hyperscan的shufti匹配,用于单字符集的匹配,核心使用了intel的_mm_shuffle_epi8指令,其为针对16字节变量的指令。如下函数pshufb_m128,根据第二个参数b中保存的索引值,由参数a中获得相应位置的值,保存到result中。参数b中每个字节的低四位作为索引值,索引值的范围为:[0, 15],对应参数b中的16个字节,查询不会超出范围。另外,如果参数b中某个字节的最高位为1,不执行查询操作,结果固定为0。
2023-06-11 22:21:37
704
原创 vermicelli双字符匹配
其次,分别与第一个要查找的字符chars1,以及第二个字符chars2进行比较。如下示例,假设需要匹配的两个字符为:ab,输入64字节长度字符串为:thisisatestchabt…对于字符b,仅在位置14产生了一处匹配(mask2)。之后,将mask2右移1位,这样mask2的第14位移动到了第13位,将其与mask1进行位与操作,得到匹配结果z,第13位为1(ctz64函数获得)。dvermMini函数执行双字符匹配,每次最多可检测64字节的输入数据,返回第一个匹配的起始位置。
2023-06-11 18:15:00
177
原创 vermicelli单字符匹配
vermMini函数处理单字符的匹配,每次最多匹配64字节长度的数据,返回首个匹配位置。参数chars中保存了64个相同字符(如字符a),待匹配数据长度小于等于VERM_BOUNDARY(64)字节。AVX-512指令_mm512_maskz_loadu_epi8将buf 到 buf_end内存中数据以字节为单位加载到m512变量中,64bit掩码mask指定了要加载到data中的字节,mask中bit为零表示不加载buf对应字节位置的数据。
2023-06-04 21:07:00
191
翻译 GCC内存模型同步模式
事实上,它并不像听起来那么复杂,所以为了让你的眼睛不那么呆滞,请针对每一种不同的内存模型来研究以下的示例:当两个线程以顺序一致模式同步时,所有可见的变量都必须在系统中刷新,以便所有线程都能看到相同的状态。因此,这两个assert都是可通过的。释放/获取模式只需要同步所涉及的两个线程。这意味着同步的值对于其他线程是不可交换的。线程2中的assert必须仍然是可通过的,因为线程1和2与通过x.load()操作进行了同步。
2023-05-21 21:33:57
259
原创 VPP时间轮
结构tw_timer_wheel是定时器的总结构。初始化时首先初始化时间轮的超时函数、最大时长,运行间隔/频率等,其中运行间隔不能为0。expired_timer_handles向量记录超时的定时器句柄,初始为空。初始化tw_timer_wheel_slot_t结构的二维数组w,第一个维度为时间轮的数量;第二个维度为每个时间轮的slot数量。每个slot中添加一个定时器(tw_timer结构),slot的head_index赋值为定时器的索引。所有的定时器统一在timers池中分配。
2023-05-07 22:25:16
1027
原创 linux-cp节点node路径
如下linux-cp命令,为VPP中接口创建对应的linux接口tap1,类型默认为TAP。可指定命令参数tun,来创建TUN类型接口。函数lcp_itf_pair_add参数如下:host_sw_if_index - VPP中对应的virtio接口索引;phy_sw_if_index - VPP中的物理接口索引;host_name - linux中主机接口的名称host_index - linux中主机接口的索引。在调用此函数时,virtio接口和linux主机接口都已经创建完成。
2023-04-02 20:36:25
721
原创 LCP插件linux-cp-xc-ip6节点
如下命令创建LCP接口对,VPP物理接口eth0,对应linux接口host-eth0。LCP插件创建了virtio类型的tap1接口,用于和host-eth0连通。设置VPP接口和linux中对应接口的IPv6地址。如下定义节点linux-cp-xc-ip6,类型VLIB_NODE_TYPE_INTERNAL。节点属于ip6-unicast/ip6-multicast 特性arc。用于处理linux发往VPP的流量。节点处理函数lcp_xc_ip6如下,实际处理由函数lcp_xc_inline完成。
2023-03-26 20:44:08
447
原创 LCP插件linux-cp-xc-ip4节点
如下命令创建LCP接口对,VPP物理接口eth0,对应linux接口host-eth0。LCP插件创建了virtio类型的tap1接口,用于和host-eth0连通。如下定义节点linux-cp-xc-ip4,类型VLIB_NODE_TYPE_INTERNAL。节点属于ip-unicast/ip4-multicast 特性arc。用于处理linux发往VPP的流量。节点处理函数lcp_xc_ip4如下,实际处理由函数lcp_xc_inline完成。
2023-03-19 19:56:15
776
原创 Linux-cp处理arp回复报文
在linux-cp插件中,新建feature,名称为lcp_arp_phy_arp_feat,其所属的ARC为arp。feature中的node节点为linux-cp-arp-phy。此feature位于arp-reply feature之前。如下为node节点lcp_arp_phy_node的定义。如下show features命令,在ARP ARC中,新注册的feature linux-cp-arp-phy位于arping-reply之前。
2023-03-12 21:07:40
938
dm-launcher-7.20.msi
2024-09-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人