自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

redwingz的博客

Linux内核网络、虚拟化

  • 博客(598)
  • 资源 (5)
  • 论坛 (1)
  • 收藏
  • 关注

原创 IPv6多径路由添加

如下ip命令添加多径路由:# ip -6 route add 3ff0::/64 nexthop via 20::1 weight 10 nexthop via 30::1 weight 30内核函数inet6_rtm_newroute处理ip route命令,对于多径路由由子函数ip6_route_multipath_add负责进行添加操作。static int inet6_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh,

2021-07-30 23:29:51 14

原创 IPv6路由项添加

如下路由添加命令:# ip route add 3ffe::/64 via 3001::1路由添加路由项添加函数__ip6_ins_rt,调用核心函数fib6_add,第一个参数为要插入的路由表的根节点。static int __ip6_ins_rt(struct fib6_info *rt, struct nl_info *info, struct netlink_ext_ack *extack){ int err; struct fib6_

2021-07-29 23:42:00 16

原创 IPv6多路径路由选择

IPv6路径选择主要由函数fib6_select_path完成,如下介绍。如果路由查询结果项中fib6_info没有配置nexthop属性路由,并且siblings的数量为0,不存在多个内置路由路径,则当前路由即为选择的路由。或者siblings的数量不为0,但是此次查询结果已经匹配了指定的出接口,也认为其为合适的路由。跳转到最后out,将路由下一跳赋值给结果fib6_result结构的成员nh(res->nh)。随后将会介绍通用路由查找,其中将先行调用rt6_device_match进行了出接口

2021-07-28 20:35:41 6

原创 IPv6 throw路由

throw路由与unreachable路由大体一致,参考 IPv6 unreachable路由 。如下添加IPv6路由,对于目的地址属于3302::/64的报文,将报文丢弃,回复ICMPV6_DEST_UNREACH类型ICMPv6消息。# sudo ip -6 route add throw 3302::/64 # # ip -6 route::1 dev lo proto kernel metric 256 pref mediumunreachable 3301::/64 dev lo met

2021-07-24 22:45:54 20

原创 IPv6 unreachable路由

如下添加IPv6路由,对于目的地址属于3301::/64的报文,将报文丢弃,回复ICMPV6_DEST_UNREACH类型ICMPv6消息。# ip -6 route add unreachable 3301::/64# # ip -6 route::1 dev lo proto kernel metric 256 pref mediumunreachable 3301::/64 dev lo metric 1024 pref medium参考 IPv6-unreachable策略路由 中的介

2021-07-24 04:52:15 51

原创 IPv6 Unreachable策略路由

IPv6全局定义了一个unreachable路由缓存项的模板ip6_null_entry_template,每个网络命名空间将据此生成一个路由缓存项ip6_prohibit_entry。static const struct rt6_info ip6_null_entry_template = { .dst = { .__refcnt = ATOMIC_INIT(1), .__use = 1, .obsolete = DST_OBS

2021-07-22 22:35:47 12

原创 路由nexthop下一跳blackhole属性

以下添加blackhole属性的nexthop及相关路由。# ip -6 nexthop add id 1 blackhole# # ip nexthopid 1 blackhole ## ip -6 nexthop add id 2 blackhole## ip nexthop add id 3 group 1# # ip nexthop id 1 blackhole id 2 blackhole id 3 group 1 # # ip -6 route add 3ffe

2021-07-21 22:44:49 16 1

原创 IPv6 Blackhole路由

如下添加IPv6路由,对于目的地址属于3301::/64的报文,将报文丢弃。# ip -6 route add blackhole 3301::/64# # ip -6 route::1 dev lo proto kernel metric 256 pref mediumblackhole 3301::/64 dev lo metric 1024 pref medium参考 IPv6-Prohibit路由 中的介绍,此处介绍两者不同的地方。Blackhole路由添加IP命令下发到内核的Bl

2021-07-17 22:38:01 19

原创 IPv6 Blackhole策略路由

IPv6全局定义了一个blackhole路由缓存项的模板ip6_blk_hole_entry_template,每个网络命名空间将据此生成一个路由缓存项ip6_blk_hole_entry。static const struct rt6_info ip6_blk_hole_entry_template = { .dst = { .__refcnt = ATOMIC_INIT(1), .__use = 1, .obsolete = D

2021-07-17 00:06:51 34

原创 IPv6 Prohibit路由

如下命令添加Prohibit路由项,禁止路由到3301::/64网络的流量。# ip -6 route add prohibit 3301::/64## ip -6 route::1 dev lo proto kernel metric 256 pref mediumprohibit 3301::/64 dev lo metric 1024 pref mediumProhibit路由添加IP命令下发到内核的Prohibit路由项,指定类型rtm_type为RTN_PROHIBIT,内核中将其

2021-07-15 22:20:23 19 1

原创 IPv6 Prohibit类型策略路由

IPv6全局定义了一个prohibit路由缓存项的模板ip6_prohibit_entry_template,每个网络命名空间将据此生成一个路由缓存项ip6_prohibit_entry。static const struct rt6_info ip6_prohibit_entry_template = { .dst = { .__refcnt = ATOMIC_INIT(1), .__use = 1, .obsolete = DS

2021-07-13 19:51:33 14

原创 IPv6定时路由

内核版本要求高于4.4。如下设置路由时长为1200秒,当允许命令查看时,还剩余1151秒。# ip -6 route add 3302::/64 dev ens35 expires 1200 # # ip -6 route 3302::/64 dev ens35 metric 1024 expires 1151sec pref medium在内核部分,将下发的expires值转换为系统时钟值,并且设置RTF_EXPIRES标志位。static int rtm_to_fib6_config

2021-06-29 23:39:39 54 2

原创 未缓存的IPv6路由项链表

内核将未缓存的IPv6路由项组成一个链表rt6_uncached_list,其为一个每处理器变量。struct uncached_list { spinlock_t lock; struct list_head head;};static DEFINE_PER_CPU_ALIGNED(struct uncached_list, rt6_uncached_list);在IPv6路由初始化函数中,初始化rt6_uncached_list链表头和自旋锁。int __i

2021-06-27 22:19:09 44 1

原创 未缓存的路由项链表

内核将未缓存的路由项组成一个链表rt_uncached_list,其为一个每处理器变量。struct uncached_list { spinlock_t lock; struct list_head head;};static DEFINE_PER_CPU_ALIGNED(struct uncached_list, rt_uncached_list);在路由初始化函数中,初始化rt_uncached_list链表头和自旋锁。int __init ip_rt_i

2021-06-22 22:35:52 31 2

原创 路由缓存信息文件rt_acct和rt_cache

PROC文件/proc/net/rt_acct和PROC文件/proc/net/stat/rt_cache。rt_acct 文件PROC文件/proc/net/rt_acct,基于路由的QoS控制,static int __net_init ip_rt_do_proc_init(struct net *net){#ifdef CONFIG_IP_ROUTE_CLASSID pde = proc_create("rt_acct", 0, net->proc_net, &rt_

2021-06-17 22:48:17 27

原创 IPv4路由cache统计信息

内核定义如下的每处理器结构rt_cache_stat记录路由缓存信息。struct rt_cache_stat { unsigned int in_slow_tot; unsigned int in_slow_mc; unsigned int in_no_route; unsigned int in_brd; unsigned int in_martian_dst; unsigned int in_martia

2021-06-16 22:54:59 37

原创 一对多GRE隧道配置

使用如下的配置拓扑: |----------------| |----------------| | | ens33 ens33 | | | Client1 |---------------------------------------| Server |

2021-06-09 22:46:33 84

原创 ISATAP隧道处理

基础的sit隧道处理请参考:SIT通用隧道, 此处仅涉及isatap相关部分。netlink用户接口函数ipip6_newlink创建新的sit隧道,函数ipip6_tunnel_create创建新的隧道。static int ipip6_newlink(struct net *src_net, struct net_device *dev, struct nlattr *tb[], struct nlattr *data[], struct netlink_ext_ack

2021-06-08 21:36:52 53

原创 6rd隧道处理

基础的sit隧道处理请参考:SIT通用隧道,此处仅涉及6rd相关部分。命名空间fallback设备命名空间初始化中,使用函数ipip6_tunnel_clone_6rd初始化fallback设备的6rd相关参数。static int __net_init sit_init_net(struct net *net){ ... /* FB netdevice is special: we have one, and only one per netns. * Allowing

2021-06-04 23:07:42 74

原创 SIT通用隧道

SIT模块不仅支持IPv6-over-IPv4封装,还支持IPv4-over-IPv4和MPLS-over-IPv4封装报文,其中IPv4-over-IPv4与IPIP隧道功能相同。对于控制接口,注册了每个网络命名空间处理结构sit_net_ops和netlink处理接口sit_link_ops。static int __init sit_init(void){ int err; pr_info("IPv6, IPv4 and MPLS over IPv4 tunneling

2021-06-03 21:34:31 81

原创 ifconfig创建sit隧道

通常可使用ip命令创建sit隧道设备,如下:# ip tunnel add sit1 mode sit remote 192.168.20.1 local 192.168.20.5## ip link5: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/sit 0.0.0.0 brd 0.0.0.06: sit1@NONE: <POINT

2021-06-02 21:30:09 58

原创 禁止内核创建fallback设备

使用ip link命令查看接口的时候,会发现一些系统自动创建的隧道fallback设备,如:tunl0、gre0、gretap0、sit0、ip6tnl0和ip6gre0等。/ # ip link14: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT group default qlen 1 link/ipip 0.0.0.0 brd 0.0.0.015: gre0@NONE: <NOARP&gt

2021-06-01 21:51:44 34

原创 Linux隧道6to4

6to4地址格式如下: | 3 | 13 | 32 | 16 | 64 bits | +---+------+-----------+--------+--------------------------------+ |FP | TLA | V4ADDR | SLA ID | Interface ID | |001|0x0002|

2021-05-30 22:47:43 53

原创 Linux隧道sit

Linux隧道sit(Simple Internet Transition),配置环境如下: |----------| |----------| | | ens33 ens33 | | | Client |--------------------------------| Server | | | 1

2021-05-30 22:46:55 88

原创 Linux隧道isatap(sit模式)

可使用isatap模式配置isatap隧道(isatap隧道模式),也可使用sit模式实现。如下环境: |----------| |----------| | | ens33 ens33 | | | Client |--------------------------------| Server | |

2021-05-30 22:45:28 50

原创 Linux隧道isatap配置

与6rd不同,ISATAP(Intra-Site Automatic Tunnel Addressing Protocol)将IPv4地址嵌入在IPv6地址的接口ID部分,如下为ISATAP地址的接口ID部分,其组成为:24位的IANA OUI (00-00-5E),8位的值0xFE,以及32位的IPv4地址。如果嵌入的IPv4地址为公网IP,那么u位(universal/local)设置为1,否则,设置为0。另外g为表示individual/group。 0

2021-05-16 22:46:55 97

原创 linux隧道6rd配置

拓扑如下所示,CE(Customer Edge)和BR(Border Relay)使用两台Ubuntu系统的虚拟机。 |----------| |----------| | | ens33 ens33 | | | CE |--------------------------------| BR | |

2021-05-09 22:46:14 137

原创 LDAP配置与测试

安装环境:$ cat /etc/issueUbuntu 20.10 \n \l安装ldap,当前版本为2.4.53:apt-get updateapt-get install slapd ldap-utils -y$ slapd -VV@(#) $OpenLDAP: slapd 2.4.53+dfsg-1ubuntu1.4 (Feb 18 2021 14:19:03) $ Ubuntu Developers <ubuntu-devel-discuss@lists.ub

2021-04-01 23:03:09 206 1

原创 IPv6转发开关

conf/all/forwarding配置全局的接口间IPv6报文转发,默认值为0,此值的修改将同时修改每个接口的forwarding配置项。接口目录下forwarding配置项对于接口的Host/Router行为,默认值为0,遵循以下主机行为:1)在邻居发现协议的Neighbour Advertisements报文中不设置IsRouter标志;2)如果accept_ra为真(默认值),可发送Router Solicitations报文;3)如果accept_ra为真(默认值),可接收Router

2021-03-30 22:37:14 280

原创 optimistic-dad

配置项optimistic_dad用于控制是否执行优化的DAD检查;配置项use_optimistic控制在源地址选择时,可使用optimistic地址,但是其优先级低于Preferred地址。如下函数ipv6_allow_optimistic_dad,命名空间和设备的optimistic_dad配置项有一个为真,就启用此功能。static bool ipv6_allow_optimistic_dad(struct net *net, struct inet6_dev *idev)

2021-03-23 22:28:44 131

原创 icmp攻击类型ping-of-death

某些协议栈对于分片报文,事先分配最大IP长度65536字节的缓冲区,而实际接收到的分片在重组时,超过65536的长度将导致缓冲区溢出错误。当前的各个协议栈实现早已修复此问题。以下程序用于发送超过65536的IP分片报文,首先是头文件部分:#include <stdio.h>#include <stdlib.h>#include <strings.h>#include <sys/types.h>#include <sys/socket.h&gt

2021-03-21 21:45:03 168

原创 ipv6设备的删除标记dead

在创建inet6_dev设备结构函数中,在分配了inet6_dev结构内存之后,如果出现邻居参数结构neigh_parms分配失败,或者snmp相关结构分配失败的情况,需要释放inet6_dev结构,直接返回错误。static struct inet6_dev *ipv6_add_dev(struct net_device *dev){ struct inet6_dev *ndev; ndev = kzalloc(sizeof(struct inet6_dev), GFP_KERNEL

2021-03-16 23:21:43 68

原创 IPv6地址DAD检测

DAD冲突检测和IPv6地址失效检测使用的都是addrconf_wq队列,其在addrconf_init函数中创建。int __init addrconf_init(void){ struct inet6_dev *idev; ... addrconf_wq = create_workqueue("ipv6_addrconf"); if (!addrconf_wq) { err = -ENOMEM; goto out_nowq;

2021-03-13 22:13:20 511

原创 clamav的unrar解压模块加载

clamav使用的unrar功能,是一个单独的模块,使用C++实现,编译完成之后生成两个so文件libunrar.so和libclamunrar_iface.so,由命名可知,前者为unrar功能的主体,而后者为封装的接口。在使用的时候,作为动态库进行加载。如下的configure变量,可指定unrar编译使用的编译器等参数。 CXX C++ compiler command CXXFLAGS C++ compiler flags LDFLAGS linker f

2021-03-11 22:42:33 104

原创 CLAMD检测到病毒的处理

可通过clamd配置文件/usr/local/etc/clamd.conf中的配置项VirusEvent进行定义,默认情况下未指定VirusEvent,变量v会替换为发现的病毒名称。# Execute a command when virus is found. In the command string %v will# be replaced with the virus name.# Default: no#VirusEvent /usr/local/bin/send_sms 12345678

2021-03-10 20:56:13 108

原创 TCP绑定套接口链表

内核中全局变量tcp_hashinfo的成员bhash保存有全局的bind套接口。bhash是以哈希值为索引的数组,其中inet_bhashfn函数负责依据端口号和命名空间生成哈希值。每个数组元素包含一个哈希值相同的inet_bind_bucket结构组成的链表(chain链表)。struct inet_hashinfo tcp_hashinfo;struct inet_hashinfo { ... /* Ok, let's try this, I give up, we do n

2021-03-09 21:40:21 97

原创 IPv6源地址选择

源地址的选择依据出接口、目的地址、label、参数prefs和地址类型scope等参数来确定,在函数ipv6_dev_get_saddr开始,先行将这些判断参数组织到结构ipv6_saddr_dst中。scores记录每个可选地址的得分,最终分数高的地址选为要使用的源地址。int ipv6_dev_get_saddr(struct net *net, const struct net_device *dst_dev, const struct in6_addr *daddr

2021-03-06 21:28:36 247

原创 RS请求报文控制

默认情况下router_solicitations值为-1,不限制RS的发送次数。如果其为正值,表示当发送到此数量的RS报文之后,还未收到响应,则认为当前链路不存在路由器。$ cat /proc/sys/net/ipv6/conf/all/router_solicitations-1$ cat /proc/sys/net/ipv6/conf/default/router_solicitations-1router_solicitation_interval规定RS报文的发送间隔,默认为4秒钟。r

2021-03-05 21:19:41 485

原创 接口token设置

如下ip命令所示,可设置接口的token值。# ip token set ::0102:0304 dev ens33 # # ip token list token ::1.2.3.4 dev ens33token :: dev ens34token :: dev ens35内核处理TOKEN添加如下inet6_set_iftoken函数,先检查合法性:对于环回loopback接口,或者不需要邻居地址的接口(设置了IFF_NOA

2021-03-04 21:33:35 315 1

原创 CLAMAV流检查接口

可使用clamdscan工具进行文件流的检查,核心处理函数为send_stream。如下分为四个步骤:首先,发送流检查命令字:"zINSTREAM"到clamd守护进程;发送文件内容,注意存放文件数据的缓存,其头部4个字节存放的是缓存中数据长度,网络字节序;发送4个字节的空数据到clamd,表示文件流发送完成;读取clamd的检测结果。static int send_stream(int sockd, const char *filename){ uint32_t buf[BUFSI

2021-03-03 21:11:42 1202 1

WEB Portal 认证完整的交互报文

web认证交互报文,包括WLAN controller与portal server的认证与注销,AC与radius 服务器的认证报文。

2018-04-24

IKEv2-camellia.pcap

IKEv2协议使用camellia加密算法的协商报文,交互流程。

2019-10-28

IKEv2-rw-cert2.pcap

strongswan使用linux内核的af_alg加密接口配置,IKEv2协议交互报文。

2019-10-28

libssh2-1.8.0 and ssh2_batch example

ssh2_batch可执行程序,用于非交互式的ssh命令执行。源代码和libssh2

2018-06-13

botan-ed25519.pcap

IKEv2协议交互报文,认证方式选用Ed25519算法的证书方式。

2019-10-28

redwingz的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除