Note5macvlan,sol
Posted 码农编程录
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Note5macvlan,sol相关的知识,希望对你有一定的参考价值。
文章目录
- 6.iptables:(ip+tables)对网络上数据包通过表的形式进行规则的修改
- 7.linux的route指令:route add
- 1.BMC虚拟多网口:macvlan是kernel提供的一种网卡虚拟化技术,可将网卡(不一定是真实的物理网卡)虚拟出多个接口,这网卡称为master或父接口,这些虚拟接口和外面环境通信都是通过父接口
- 1.1 bridge:ip netns add ns001 / ns002
- 1.2 private:FB Openbmc(AST2520实物芯片)和OcpOpenBMC(qemu ast2500-evb)以及X86 Ubuntu上验证过, Kernel版本均5.0+
- 编译Kernel:BMC/CPU OS的Linux Kernel Config里面加CONFIG_MACVLAN=m/y
- 创建/启动网卡/获取DHCP地址:创建网卡以eth0为目标物理网口,虚拟网口的MAC地址自定义,mode可以选择private不能互通,bridge内部互通等
- 配置路由表:由于5个网口都被分配在一个网段如10.75.159.0/24(掩码一样),导致linux内部路由会以高优先级的网口如eth0来响应外部的arp/icmp/tcp等各种网络请求(如ping 10.75.159.x都走eth0网卡)。为了达到5个虚拟网口能在同网段以5个独立网口的形式工作,呈现5个独立网口MAC地址,需要配置路由表
- 远端服务器检查:ping 10.75.159.117/120/121/125/132
- 案例:iproute2,设置路由重启后不丢失/etc/network/interfaces:up route add -host 10.1.1.2 dev eth1
- 1.3 creat_macvlan.sh:macvlan文件夹里file文件夹里有.sh和.service,file文件夹同级有.bb文件
- 2.rsyslog:rsyslogd一个进程 ,管理每个进程发来的log并往/var/log里写,syslog函数将log写给rsyslogd进程
- 3.journalctl:内存中日志,因为是二进制无法查看,所以用journalctl命令查看
- 4.sol:cpld自动捕捉热键/手动配寄存器
- 5.位号/lspci/
- 6.
6.iptables:(ip+tables)对网络上数据包通过表的形式进行规则的修改
6.1 filter表:3个链
man iptables(防火墙)查看有哪些表(table)。filter(过滤器)表【不转发】
会将进入当前机器数据包进行过滤,以及从机器出去的数据包,不符合条件不给发出去。nat表【转发】
改变目的或源地址和端口。
上面的表是由链构成,进入和出去配置规则放在链中:filter表自带的三个链:FORWARD链
:和nat表相关,路由转发的作用,-L(list)。INPUT和OUTPUT链
:默认(policy)没有一条规则即都能进来和出去。
如下在ip为192.168.0.12机器8081端口上启动服务。
如下本机器(192.168.0.12)收到一个包,这个包目的地址是8081且是tcp包
的话丢弃。
如下在192.168.0.144机器访问0.12。
如下删除后又能访问了。
如上是在input链上进行的防火墙的设置,如下也可以设置output链
,将发往0.144包丢弃,如下没有配置端口,所以ssh连接也断了,因为我在0.144win上ssh双向连接到0.12即如下窗口,可修改0.144win的ip地址,再进行ssh连接。
上面通过-A添加规则,先后顺序是第一条成功了按第一条来,不成功第二条,一直往下匹配,最终也没找到匹配就按照policy。想要当前规则最高优先级用-I(insert),不用-A(append),-I INPUT 5会插在第5条。
6.2 nat表:4个链
如下在0.11机器上。
如下在0.144 win机器上。
把0.12的7788端口转发到0.11的7799端口,实现反向代理。这件事分为下面两步:虽然第一条是请求
转发过去了,但是响应
(第二条)要改为本机,才能发回来。
如下是在0.12机器shell上,第一行对应上面第一条:访问本机即0.12的dport(目的端口)即7788端口的数据包转到0.11的7799端口。第二行对应上面第二条。
如下是上一行命令执行结果,查看一下FOREARD有没有过滤掉。
如下重写FORWARD链为ACCEPT即在上面DOCKER-USER规则前面添加一个ACCEPT规则。
如上不是配置xx.conf的服务不需要重启,随时生效,如下两个都能访问了。
如下绿色方框是net表的链。两条路:改目或不改目。橙色的input用来改源地址和post功能一样,橙色的output用来该目的地址和pre功能一样,那不是和pre,post重复了吗?不重复,当电脑里有一个APP如下(没有左半边即没有pre到Forward),pre和input失效,右半边output起到了改目的地址作用。
7.linux的route指令:route add
如下Gateway指定网关,要访问172.17.0.3这ip,就会根据Destination和Genmask
计算出来满足docker0这一行条件,走这条路由信息。Flags是标识(不重要),U表示正在使用中,G表示第二列Gateway不为*即空即0.0.0.0即不指定掩码)
。H表示指定具体ip(32位掩码,4个255,全掩)而不是网段
。default是指访问一个ip都不满足下面两个路由信息条件,走default这条。255.255.0.0掩了16位即172.17开头的会走第二条,255.255.255.0掩了24位。
PandoraBox.lan其实是个ip,因为在局域网下,默认配置成了域名。172.17.0.7只1跳(直接跳脸上),因为Gateway为*空且都在docker0交换机下。如下命令都是在ubuntu机器上执行,路由信息看该章节最后一张图。
下面用route add
指令添加自己的路由表:两种类型: -net x.x.x.x/xx
指定网络/网段,-host x.x.x.x
指定具体ip。两种指向:-dev
网卡名(指定通过哪个网卡),-gw
网关ip(指定通过哪个网关)。
如下案例:从ubuntu机器ping 199.199.199.199,配置路由使能通:先给win机器添加ip,点高级弹出如下最后一张图,填199.199.199.199,255.0.0.0,最后全点击确定。
未添加路由表时199.199.199.199不属于172.或192.两个网络,所以走了default,到了PandoraBox.lan即路由器网关,继续往上找,光猫也没发现继续往上找,传到了联通,199.199.199.199还没被用或不能被ping。
1.BMC虚拟多网口:macvlan是kernel提供的一种网卡虚拟化技术,可将网卡(不一定是真实的物理网卡)虚拟出多个接口,这网卡称为master或父接口,这些虚拟接口和外面环境通信都是通过父接口
1.1 bridge:ip netns add ns001 / ns002
macvlan模拟的mac不同,如下第一行和第二行创建两个以ens32为父接口
的macvlan1和macvlan2虚拟网口。
如下将ns001/2绑定网卡macvlan1/2,进入ns001虚拟环境,将网卡up起来。
如下添加ip,不通原因是bridge模式和父接口(.138)
是不通的。
如下在ns002虚拟环境,宿主机(76.1)
指的windows这台机器,如下两个都是往外ping。
1.2 private:FB Openbmc(AST2520实物芯片)和OcpOpenBMC(qemu ast2500-evb)以及X86 Ubuntu上验证过, Kernel版本均5.0+
编译Kernel:BMC/CPU OS的Linux Kernel Config里面加CONFIG_MACVLAN=m/y
如下在编译的服务器上编译完后,如果找不到就删除build目录重新编译。
如下在烧录的机器上烧录镜像后,vi第一行.dep文件。
如下不用insmod kernel/drivers/net/maclan.ko。
创建/启动网卡/获取DHCP地址:创建网卡以eth0为目标物理网口,虚拟网口的MAC地址自定义,mode可以选择private不能互通,bridge内部互通等
假设生成5个虚拟网口eth0.1-eth0.5命令如下,ifconfig检查5个虚拟网口的IP地址和MAC地址(都不一样):
ip link add link eth0 dev eth0.1 address D6:D2:52:A8:28:28 type macvlan mode private
ip link add link eth0 dev eth0.2 address D6:D2:52:A8:28:29 type macvlan mode private
ip link add link eth0 dev eth0.3 address D6:D2:52:A8:28:2a type macvlan mode private
ip link add link eth0 dev eth0.4 address D6:D2:52:A8:28:2b type macvlan mode private
ip link add link eth0 dev eth0.5 address D6:D2:52:A8:28:2c type macvlan mode private
ifconfig eth0.1 up
ifconfig eth0.2 up
ifconfig eth0.3 up
ifconfig eth0.4 up
ifconfig eth0.5 up
dhclient eth0.1
dhclient eth0.2
dhclient eth0.3
dhclient eth0.4
dhclient eth0.5
配置路由表:由于5个网口都被分配在一个网段如10.75.159.0/24(掩码一样),导致linux内部路由会以高优先级的网口如eth0来响应外部的arp/icmp/tcp等各种网络请求(如ping 10.75.159.x都走eth0网卡)。为了达到5个虚拟网口能在同网段以5个独立网口的形式工作,呈现5个独立网口MAC地址,需要配置路由表
echo "210 eth0table" >> /etc/iproute2/rt_tables # 210越大优先级越低
echo "220 eth1table" >> /etc/iproute2/rt_tables
echo "230 eth2table" >> /etc/iproute2/rt_tables
echo "240 eth3table" >> /etc/iproute2/rt_tables
echo "250 eth4table" >> /etc/iproute2/rt_tables
ip route add 10.75.159.0/24 dev eth0.1 src 10.75.159.117 table eth0table # 网段(掩码),ip
ip route add 10.75.159.0/24 dev eth0.2 src 10.75.159.120 table eth1table
ip route add 10.75.159.0/24 dev eth0.3 src 10.75.159.121 table eth2table
ip route add 10.75.159.0/24 dev eth0.4 src 10.75.159.125 table eth3table
ip route add 10.75.159.0/24 dev eth0.5 src 10.75.159.132 table eth4table
ip route add default dev eth0.1 via 10.75.159.1 table eth0table # via 网关
ip route add default dev eth0.2 via 10.75.159.1 table eth1table
ip route add default dev eth0.3 via 10.75.159.1 table eth2table
ip route add default dev eth0.4 via 10.75.159.1 table eth3table
ip route add default dev eth0.5 via 10.75.159.1 table eth4table
ip rule add from 10.75.159.117 table eth0table
ip rule add from 10.75.159.120 table eth1table
ip rule add from 10.75.159.121 table eth2table
ip rule add from 10.75.159.125 table eth3table
ip rule add from 10.75.159.132 table eth4table
远端服务器检查:ping 10.75.159.117/120/121/125/132
如下只有发起ping 117才能看到117这个ip,BMC侧IP的MAC地址与远端服务器获取的一致,符合预期。使用tcp方式测试:BMC端(服务端)iperf -s -p port,远端(客户端)iperf -c BMCIP -t 1000 -i 3 -p port。
案例:iproute2,设置路由重启后不丢失/etc/network/interfaces:up route add -host 10.1.1.2 dev eth1
注意如下是规则rule,不是route。
如下没指定路由表就会到main表中。
hping3 -I eth0 -a 10.75.159.37 -S 10.75.159.138 -p 8080 -i u100 发起攻击,iptables限制端口,限制连接数防止攻击。
1.3 creat_macvlan.sh:macvlan文件夹里file文件夹里有.sh和.service,file文件夹同级有.bb文件
#!/bin/sh
IP_ROUTEFILE_PATH="/etc/iproute2/rt_tables"
priority_arry=(210 220 230 240)
tablename_arry=(eth0table eth1table eth2table eth3table)
#dynamic routing configuration for macvlan
dynamic_routing()
#Initialize basic network information
index=0
for i in $(ifconfig | grep -o ^[a-z0-9.]* | grep -v lo); do
ipaddr_array[$index]=$(ifconfig "$i" | sed -n 2p | awk ' print $2 ' | tr -d 'addr:')
devname_array[$index]=$i
gateway_array[$index]=$(route | grep "$devname_array[$index]" | grep 'default' | awk 'print $2')
iprange_array[$index]="$ipaddr_array[$index]%[^0-9]*.0/24"
index=$((index + 1))
done
#Create the table and initialize it
index=0
for i in "$tablename_arry[@]"; do
tablename=$(cat $IP_ROUTEFILE_PATH | grep "$devname_array[$index]" | sed -n 1p | awk -F ' ' 'print$2')
if [ "$tablename" != "$tablename_arry[$index]" ]; then
echo "$priority_arry[$index] $tablename_arry[$index]" >> $IP_ROUTEFILE_PATH
fi
ip route flush table "$tablename_arry[$index]"
index=$((index + 1))
done
#Configure dynamic routing for the table
index=0
for i in "$tablename_arry[@]"; do
ip route add "$iprange_array[$index]" dev "$devname_array[$index]" src "$ipaddr_array[$index]" table "$tablename_arry[$index]"
ip route add default dev "$devname_array[$index]" via "$gateway_array[$index]" table "$tablename_arry[$index]"
ip rule add from "$ipaddr_array[$index]" table "$tablename_arry[$index]"
index=$((index + 1))
done
###Creat MAC Vlan
ip link add link eth0 dev eth1 type macvlan
ip link add link eth0 dev eth2 type macvlan
ip link add link eth0 dev eth3 type macvlan
ip link set eth1 up
ip link set eth2 up
ip link set eth3 up
sleep 2
#dhclient eth0.01
#dhclient eth0.02
#dhclient eth0.03
dynamic_routing
# macvlan.service
[Unit]
Description=Mac Vlan Server
After=-xyz.openbmc_project.Network.service
[Service]
ExecStart=/usr/bin/creat_macvlan.sh
Type=oneshot
[Install]
WantedBy=multi-user.target
# macvlan.bb
SUMMARY = "Phosphor BMC Macvlan"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://$COREBASE/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
inherit pkgconfig
inherit obmc-phosphor-systemd
SYSTEMD_SERVICE:$PN += "macvlan.service"
DEPENDS += "systemd"
SRC_URI += "file://macvlan.service \\
file://creat_macvlan.sh \\
"
do_install()
install -d $D$bindir
install -m 0755 $WORKDIR/creat_macvlan.sh $D$bindir/creat_macvlan.sh
S = "$WORKDIR"
2.rsyslog:rsyslogd一个进程 ,管理每个进程发来的log并往/var/log里写,syslog函数将log写给rsyslogd进程
ident将是一个标记,省略的话即打印出进程的名字如下。
facility默认是user。
如下排除文件中以#开头
的和去除空行
。
输出频道为用户可能想要的输出类型提供了保护,在规则中使用前要先定义如下:
10.75.159.146做服务端,/etc/rsyslog.conf 打开如下配置,tcp打开tcp的配置:
module(load="imudp")
input(type="imudp" port="514")
$IncludeConfig /etc/rsyslog.d/*.conf
/etc/rsyslog.d/remote.conf 配置如下(修改完需重启rsyslog进程),sonic将如下直接写在rsyslog.conf:
:fromhost,isequal, "10.75.159.37" /var/log/remote_37.log
以下的ip用lastb查看
2.1 logrotate:/etc/logrotate.conf = include /etc/logrotate.d
logrotate-default
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
logrotate_%.bbappend
FILESEXTRAPATHS_append := "$THISDIR/$PN:"
SRC_URI += " \\
file://logrotate-3.9.1/examples/logrotate-default \\
"
# We need to rotate every hour or could quickly run out of RAM.
LOGROTATE_SYSTEMD_TIMER_BASIS = "hourly"
LOGROTATE_SYSTEMD_TIMER_ACCURACY = "30m"
do_install_append()
install -p -m 644 $WORKDIR/logrotate-3.9.1/examples/logrotate-default $D$sysconfdir/logrotate.conf
if $@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d); then
# XXX For now we build Yocto with systemd enabled and sysvinit
# compat to allow remaining sysvinit scripts to continue working.
# With both systemd & sysvinit compat on, the logrotate recipe gets
# it wrong and installs both the crontab entry and systemd timer.
# When sysvinit compat is removed then this can go away.
rm -f $D$sysconfdir/cron.daily/logrotate
fi
2.2 rsyslog:通过rsyslog.conf采集内存中数据并保存
log_rotate:执行第一行
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit $EXITVALUE
rsyslog.logrotate:相当于/etc/logrotate.conf
/var/log/fscd.log
/var/log/dhclient.log
/var/log/messages
/var/log/sensor-mon.log
/var/log/power-mon.log
/var/log/come-mon.log
/var/log/temp-mon.log
rotate 9
missingok
notifempty
size 20M
delaycompress
compress
postrotate
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
rsyslog.conf
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog # kernel logging (formerly provided by rklogd)
module(load="imfile") # Provides support for tailing and categorizing existing log files
$ActionQueueType Direct # Do not queue these, write immediately
global(workDirectory="/tmp") # Remembers the last file position when syslog restarts and does not retransmit
# Set the default permissions
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$PreserveFQDN on
# Use format recognized by log-util.
$template LogUtilFileFormat," %$YEAR% %TIMESTAMP% %pri-text% __OPENBMC_VERSION__: %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\\n"
# Store dhclient logs into dhclient.log,
# store everything else into /var/log/messages
if $programname == "dhclient" then /var/log/dhclient.log
else
# limit size to 21M
$outchannel messagefile_channel, /var/log/messages, 22020096, /usr/local/fbpackages/rotate/log_rotate
*.* :omfile:$messagefile_channel;LogUtilFileFormat
# Save boot messages also to boot.log
local7.* /tmp/boot.log;LogUtilFileFormat
# Store come-mon logs into come-mon_rsyslog.log
if $programname == "come-mon" then
$outchannel comemonfile_channel, /var/log/come-mon.log, 22020096, /usr/local/fbpackages/rotate/log_rotate
*.* :omfile:$comemonfile_channel;LogUtilFileFormat
# Store power-mon logs into power-mon_rsyslog.log
if $programname == "power-mon" then
$outchannel powermonfile_channel, /var/log/power-mon.log, 22020096, /usr/local/fbpackages/rotate/log_rotate
*.* :omfile:$powermonfile_channel;LogUtilFileFormat
# Store sensor-mon logs into sensor-mon_rsyslog.log
if $programname == "sensor-mon" then
$outchannel sensormonfile_channel, /var/log/sensor-mon.log, 22020096, /usr/local/fbpackages/rotate/log_rotate
*.* :omfile:$sensormonfile_channel;LogUtilFileFormat
# Store temp-mon logs into temp-mon_rsyslog.log
if $programname == "temp-mon" then
$outchannel tempmonfile_channel, /var/log/temp-mon.log, 22020096, /usr/local/fbpackages/rotate/log_rotate
*.* :omfile:$tempmonfile_channel;LogUtilFileFormat
#mTerm_server log (TBD)
# Send local3 log to the /var/log/messages
#input(type="imfile"
# File="/var/log/mTerm_consol.log"
# Tag="oob_mTerm_consol"
# Severity="debug"
# Facility="local3"
# reopenOnTruncate="on"
#)
# 如下将info级别及其以上级别(可改成crit等其他级别)的日志发送给target服务端
*.info action(type="omfwd" name="remoteLog" template="LogUtilFileFormat" target="10.75.159.146" port="514" protocol="udp"
queue.type="LinkedList" action.resumeRetryCount="1" action.resumeInterval="60"
queue.size="500" queue.workerthreadminimummessages="101" queue.discardseverity="0"
queue.timeoutenqueue="0" queue.timeoutshutdown="10" queue.timeoutactioncompletion="100"
action.reportSuspension="off" action.reportSuspensionContinuation="off")
$IncludeConfig /etc/rsyslog.d/*.conf
rsyslog_%.bbappend
FILESEXTRAPATHS_prepend := "$THISDIR/files:"
SRC_URI += "file://rsyslog.conf \\
file://log_rotate \\
file://rsyslog.logrotate \\
"
MTERM_LOG_FILES ?= "mTerm_$MACHINE"
do_install_append()
dst="$D/usr/local/fbpackages/rotate"
rsysconf="$D$sysconfdir/rsyslog.d"
install -d $dst
install -d $rsysconf
install -m 755 $WORKDIR/log_rotate $dst/log_rotate
install -m 644 $WORKDIR/rsyslog.logrotate $D$sysconfdir/logrotate.rsyslog
install -m 644 $WORKDIR/rsyslog.conf $D$sysconfdir/rsyslog.conf
sed -i "s/__OPENBMC_VERSION__/$OPENBMC_VERSION/g" $D$sysconfdir/rsyslog.conf
FILES_$PN += "/usr/local/fbpackages/rotate"
3.journalctl:内存中日志,因为是二进制无法查看,所以用journalctl命令查看
4.sol:cpld自动捕捉热键/手动配寄存器
如下前面板rj45(网口通过rs232串口协议当串口用),cpld捕捉ctrl+urt热键切bmc或cpu。
如下sol cpu(橙线),配cpld寄存器改变接线方式如下,rj45串口直接接到bmc。
如下sol bmc(client启动),接线如下,uart3到cpld再到uart5。
5.位号/lspci/
左面是对应的LC CPLD寄存器的名字 中间是切换后器件在的通道号 右面是器件位号。
如下在9548上,起始地址24是lc2 (switch) cpld的bus号,加上对应通道数就是虚拟的bus号。
ipad屏幕右半边的模态视图?