欢迎光临
我们一直在努力

防火墙console接口(console调试线)

  开发环境

  客户端

  开发板:FireFly-RK3399

  Linux 4.4

  IP:192.168.137.110

  服务端

  VMware Workstation Pro16,ubuntu 18.04

  IP:192.168.137.100

  MAC:00:0c:29:c1:9c:ed

  netconsole简介

  netconsole模块可以让printk信息(输出到控制台的信息)通过网络(UDP)发送到远程主机。

  与串口控制台不同,netconsole不需要串口线和串口。另外,它可以轻易地将多台服务器的内核信息收集到一台服务器上。

  当设备上串口无法使用时,使用netconsole将日志信息保存到远程主机更方便、可行。

  netconsole模块不能用于获取crash dump,也不能进行一般的控制台输入输出。

  netconsole模块不能获得网络相关的kernel panic,以及与操作系统启动到网络和netconsole模块启动之间发生的pnic相关的内核信息。

  netconsole编译

  netconsole 可以独立编译为模块手动加载,也可以编译进内核自动加载,本例使用的是第一种。

  编译为独立模块

  netconsole默认是没有编译进内核,需要手动编译到内核或编译成模块。

  在内核目录下执行make menuconfig 开启以下选项

  将内核重新编译后烧写到开发板上。

  手动编译netconsole模块

  之后,就会在模块目录下生成netconsole.ko的文件,这个文件就是我们所需的。

  将netconsole编译进内核

  如自定义内核启用netconsole只需将以下内核选项打开即可(编译为模块).

  如果将netconsole编译进内核自动加载,则需要在内核启动参数中传递进去,并且还要确保网卡驱动在netconsole驱动前加载。

  netconsole加载

  将netconsole.ko通过共享目录发送到开发板,给予权限,这个需要预先知道服务端的IP地址以及MAC地址。

  日志服务器在同一内网, 直接通过ping获取服务器目的MAC:

  日志服务器不在同一内网, 获取网关目的MAC:

  执行加载指令

  各个参数含义如下

  rsyslog服务端设置

  开启514端口

  客户端设置好了,配置rsyslog以在服务器模式下运行

  取消注释udp和tcp端口绑定的行:

  测试端口是否能通

  创建接收模板

  创建一个模板,指示rsyslog服务器如何存储传入的syslog消息,在GLOBAL DIRECTIVES部分之前添加模板:

  收到的日志将使用上面的模板进行解析并存储在目录/var/log/中,文件命名遵循约定:%HOSTNAME%/%fromhost-ip%-%$YEAR%-%$MONTH%-%$DAY%.log。

  日志接收模板参数的含义可参考:https://www.dandelioncloud.cn/article/details/1517852831246839810

  完成后保存并关闭文件。然后,使用以下命令检查Rsyslog配置是否存在语法错误:

  你应该看到以下输出:

  配置启动文件

  以root身份修改/etc/default/rsyslog启动配置文件

  -r 选项以允许接受外来日志消息。-x 禁用掉dns记录项不够齐全或其他的日志中心的日志。-m 修改syslog的内部mark消息写入间隔时间(0为关闭)。例如-m 180,表示每隔180分钟(每天8次)在日志文件里增加一行时间戳消息。-h 默认情况下,syslog不会发送从远端接受过来的消息到其他主机,而使用该选项,则把该开关打开,所有接受到的信息都可根据syslog.conf中定义的@主机转发过去。

  重启服务

  重新启动rsyslog服务以使更改生效:

  确认服务是否正在侦听已配置的端口:

  配置Rsyslog防火墙

  如果你的ufw防火墙服务正在运行,请允许rsyslog防火墙端口:

  输出测试

  测试使用的是SysRq键在客户端输出内核信息。

  在开发板上,修改/etc/sysctl.conf启动SysRq。

  执行下列命令,使修改生效。

  执行下列命令向控制台输出内核信息。

  在服务器的/var/log/192.168.137.110目录下即可看到生成的日志文件。

  若进入192.168.137.110目录无权限,则执行 sudo chmod 777 192.168.137.110 赋予权限。

  其他监听方法

  netcat

  在没有syslogd在运行的主机上可以使用 netcat/socat 接收来自远程主机的消息:

防火墙console接口(console调试线)
  举例

  dmesg

  -n/–console-level 控制kernel message console 输出级别, 设置输出level为debug(-n 8):

  uboot中的netconsole

  uboot下的netconsole类似于kernel下的telnet等网络终端功能,将网络作为输入输出的终端,这样就便于我们在PC端通过网络登录设备uboot中运行命令。

  uboot下netconsole的实现在drivers/net/netconsole.c中,uboot开启netconsole只需要在配置文件configs/firefly-rk3399_defconfig加入CONFIG_NETCONSOLE=y 即可。重新编译uboot,烧写到设备上。

  设置环境变量nc,设置CONFIG_NETCONSOLE_BUFFER_SIZE覆盖默认缓冲区大小,设置环境变量ncip为通信对端ip,格式为:不设置时为默认值6666,发送端口和接收端口可以分别设置,ncinport和ncoutport,

  uboot进入netonsole模式,此时串口控制台就没有输出了。

  在服务器上执行

  就可以在PC端运行uboot命令了。

  本文参考

  https://www.kernel.org/doc/html/latest/networking/netconsole.html

  https://blog.csdn.net/weixin_44143206/article/details/123598281

  https://blog.csdn.net/force_eagle/article/details/114670045

  https://www.kernel.org/doc/html/latest/networking/netconsole.html

  https://blog.csdn.net/Zhu_Zhu_2009/article/details/105120184

  https://blog.csdn.net/j00362/article/details/50389131

  http://t.zoukankan.com/clnchanpin-p-7232687.html

  https://blog.csdn.net/force_eagle/article/details/114670045

  https://blog.csdn.net/weixin_42300896/article/details/119500359

  https://0xzx.com/201912100028405199.html

  https://blog.csdn.net/u014044032/article/details/81462054

赞(0)
未经允许不得转载:掌上百科 » 防火墙console接口(console调试线)

评论 抢沙发