一文打尽OpenWrt系统内核设置(/etc/sysctl.conf)、非UCI系统配置(/etc/rc.local、/etc/profile等)

一、前言

  • 系统内核设置:OpenWrt也是一个 Linux 操作系统,因此它和桌面操作系统 Ubuntu及Fedora 一样, 采用sysctl作为系统的内核配置工具。sysctl.conf作为其内核配置文件在启动时进行加载。
  • 非UCI系统配置:OpenWrt还有一些配置并不是通过UCI配置来实现的,这部分是大多数 Linux 系统都有的配置,并且用户很少修改,因此并不提供接口给用户修改。
Title配置
系统内核设置/etc/sysctl.conf、sysctl
非UCI系统配置/etc/rc.local、/etc/profile、/etc/shells、/etc/fstab、/etc/services、/etc/proto

二、/etc/sysctl.conf配置文件

  • 文件介绍:这个文件是系统启动预加载的内核配置文件,通过sysctl命令读取和设置到系统当中。
  • 这个文件在OpenWrt系统的/etc/目录下,在OpenWrt源码的package/base-files/files/etc/目录下。

配置文件语法格式:

  • 以“#”和分号(;)开头的行均为注释行,并忽略空白行。
  • 配置值以 key=value 形式进行设置。
# comment
; comment
token = value

配置文件主要内容及含义

配 置 项含 义默 认 值
net.ipv4.ip_forward是否打开、在接口之间转发报文,表示系统启用接口之间 报文转发,这是单机版桌面系统和路由器之间的最大的不 同。网卡将接收不属于自己 IP 的报文并根据路由表进行转 发。设置为 0 表示关闭转发,设置为 1 表示打开转发1
net.ipv4.ip_default_ttl用于发送报文的默认 TTL 值,介于 1 和 255 之间64
net.ipv4.conf.all.send_redirects如果为路由器,将发送重定向 
net.ipv4.icmp_echo_ignore_all如果设置为非零值,内核将忽略所有发给自己的 ICMP ECHO 请求0
net.ipv4.icmp_echo_ignore_ broadcasts如果为非零值,内核将忽略所有发往广播或组播地址的 ICMP ECHO 请求1
net.ipv4.icmp_ignore_bogus_ error_responses对于广播地址的请求响应,记录在 log 里面。如果设置 为 1,不再给出警告1
icmp_ratelimit限制匹配 icmp_ratemask 的发送 ICMP 报文的最大速率, 0 表示不限制1000
net.ipv4.tcp_keepalive_timeTCP 流的保活时间120秒
net.ipv4.conf.default.arp_ ignore

定义接收到解析本地目标 IP 地址的 ARP 请求时的不同 的发送响应模式。

0:回复配置在任何接口上的任何本地目标 IP 地址

1:仅回复目标 IP 配置在报文所进入的接口上的请求

2:仅回复目标 IP 是报文所进入的接口的请求,并且发 送请求者的 IP 地址和接口 IP 在同一子网

3:不回复本主机配置的 IP 地址的 ARP 查询

1
net.ipv4.conf.default.rp_filter报文反向过滤技术,系统在接收到一个 IP 包后,检查该 IP 是不是合乎要求,不合要求的 IP 包会被系统丢弃。 在使用组播功能时,需要将该选项关闭0

三、sysctl命令

  • sysctl 是用于修改运行中的内核参数的命令,运行sysctl需要procfs文件系统支持。可以用sysctl读取和修改内核参数数据。
  • 参数:参数以“key= value”形式进行设置。
  • 常用选项如下:
    • -n:查询时输出配置项的值,但不输出配置项。
    • -e:当碰到不认识的配置项时,忽略错误。
    • -w:使用这个选项来修改系统设置。
    • -p:从指定的配置文件中加载配置,如果没有指定则使用默认的配置文件/etc/sysctl. conf。
    • -a:显示当前所有可用的值。

/proc/sys目录

  • 所有可用的内核参数均在/proc/sys目录下,我们用sysctl命令查询或修改的的信息就是这些目录及目录下的相关文件。

  • 内核的参数配置在启动时由sysctl工具加载,默认加载/etc/sysctl.conf。启动之后均可在/proc/sys下查询,例如直接查询是否打开路由转发:
cat /proc/sys/net/ipv4/ip_forward

  • 内核参数也可以通过直接修改/proc/sys下的文件来生效。例如打开路由转发设置,可以执行以下命令:
echo "1" > /proc/sys/net/ipv4/ip_forward

演示案例

  • 显示所有的内核配置。
/sbin/sysctl -a

  • 查询“kernel.hostname”的值。
/sbin/sysctl -n kernel.hostname

  • 修改系统主机名称为dongshao。
/sbin/sysctl -w kernel.hostname ="dongshao"
  • 加载配置。
/sbin/sysctl -p /etc/sysctl.conf

四、/etc/rc.local

  • 这个文件在系统每次启动时由/etc/rc.d/S95done 调用,是一个 shell 脚本,是在系统开 机之后最后会调用到的脚本。也就是说,当有任何想要在开机之后就立即执行的命令时, 直接将它写入/etc/rc.local,那么该命令就会在每次启动的时候自动被执行,而不必等我们 登录系统再去执行。

演示案例

  • 比如启动时增加域名服务器地址为“8.8.8.8”,则可在/etc/rc.local 增加:
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
  • 这样就可以在系统 DNS无效时有一个备份的域名服务器来查询。

五、/etc/profile

  • /etc/profile 为系统的每个登录用户设置环境变量。当用户第一次登录时该文件被执行, 此文件首先输出“banner”文件的内容,紧接着为登录用户设置环境变量,并创建一些常 用命令的链接。

演示案例

  • 例如more命令链接到less,即执行more命令最终会调用less命令。
#!/bin/sh
[ -f /etc/banner ] && cat /etc/banner

export PATH=/bin:/sbin:/usr/bin:/usr/sbin
export HOME=$(grep -e "^${USER:-root}:" /etc/passwd | cut -d ":" -f 6)
export HOME=${HOME:-/root}
export PS1='\u@\h:\w\$ '

[ -x /bin/more ] || alias more=less
[ -x /usr/bin/vim ] && alias vi=vim || alias vim=vi

[ -z "$KSH_VERSION" -o \! -s /etc/mkshrc ] || . /etc/mkshrc

[ -x /usr/bin/arp ] || arp() { cat /proc/net/arp; }
[ -x /usr/bin/ldd ] || ldd() { LD_TRACE_LOADED_OBJECTS=1 $*; }
  • 上面的代码中共定义了3个环境变量,含义分别如下:
    • PATH:决定了 shell 命令的查找位置及顺序。
    • HOME:登录用户主目录。
    • PS1:用户命令行提示符。

六、/etc/shells

  • shell是外壳的意思,是相对于Linux内核来说的。Linux有多个命令解析外壳程序, shells 文件包含系统中所有外壳程序的列表。应用程序使用此文件来确定一个外壳是否有效。每一个外壳程序占用一行,内容为外壳执行程序的绝对路径。
  • 文件内容以“#”开头,表示这行为注释行,如果 shells 内容错误可能会导致无法登录。 OpenWrt 采用/bin/ash。

七、/etc/fstab

  • 这个文件是关于文件系统的静态信息,系统启动时读取并设置。文件 fstab 包含各种 文件系统的描述信息,现在 fstab 只能通过程序读取,程序不能修改它;创建和维护这个 文件的是系统管理员。
  • 每一个文件系统占用一行来描述;一行的每一个域使用空格或制表符来隔开。以“#” 开头的是注释行。fstab 中的条目顺序也非常重要,因为 fsck、mount 和 umount 等命令会 依次读取来执行自己的任务。

文件格式

  • 第1个域是fs_spec,描述特定块设备或远程文件系统被挂载。对于块设备的挂载使用 “/dev/cdrom”或“/dev/sdb7”。对于 NFS 文件系统的挂载有主机和目录,procfs 文件系统 使用“proc”。另外一种可以表明文件系统类型(ext4 或者 swap)的是挂载的 UUID 或卷标,写成 LABEL=或,例如,“LABEL=Boot”或“UUID=3e6be9de-8139-11d1- 9106-a43f08d823a6”。这将使系统具有更好的鲁棒性:添加或删除一个 SCSI 磁盘时将更改 磁盘装置名字,而文件系统卷标不变。
  • 第2个域是fs_file,描述的是文件系统的挂载点。对于交换分区(swap),这个域的取 值应当指定为“none”。
  • 第3个域是fs_vfstype,描述的是文件系统的类型。Linux 支持大量的文件系统类型, 常见的文件系统类型有 ext3、ext4、ntfs、proc、swap、tmpfs 和 vfat 等,所有当前支持的 文件系统列表在/proc/filesystems 中。swap 表示分区用于交换,ignore 表示这行忽略,用于 显示当前未使用的磁盘分区。
  • 第4个域是fs_mntops,描述文件系统的挂载选项(是以逗号分隔的列表选项)。它至少包含挂载类型加上额外的文件系统类型。对于所有类型的文件系统常见的选项是“noauto”(不要安装在“-a”是给出时,例如, 在启动时)、“user”(允许用户挂载)、“owner”(允许设备所有者挂载)和“comment”(例 如,使用 fstab 维护程序)。“owner”和“comment”选项是特定 Linux 支持的。
  • 第5个域是fs_freq,用于 Dump 程序,是用于备份使用的。
  • 第6个域是fs_passno,用于检查和修复磁盘的工具 fsck 程序,在启动时决定检测文件 系统的顺序。根文件系统应当设置为 1,其他文件系统设置为 2。在一个物理设备上将先 后进行检查,在不同的设备上如果使用并行能力则同时进行检测。如果第 6 个域不存在, 则返回零,表示不需要检查。

八、/etc/services

  • 这个文件是互联网网络服务类型列表。这是一个普通的 ASCII 编码文件,提供了友好 的文本名称和互联网服务之间的映射,还包含了端口号和协议类型。每一个网络程序均可 以从这个文件得到服务的端口号和协议。C 函数库 getservent、getservbyname、getservbyport、 setservent 和 endservent 支持从这个文件查询。
  • 端口号由 IANA 组织赋值,当前策略是在使用端口号时同时赋值给 TCP 和 UDP 协议。 端口号小于 1024(低端口号)仅可以被有管理员权限的用户使用。这是服务器的标准实现。 这样客户端连接到低端口号是可以信赖的,而不是使用服务器的普通用户运行的欺骗程 序。众所周知,端口号由 IANA 指定并在管理员控制的空间中运行。服务类型的存在并不 意味着该服务在当前服务器上运行。

文件内容及格式

  • 各个域之间使用空格或者制表符来分割。注释以“#”开头,直到行结尾,并忽略空行。

service-name port/protocol [aliases ...]
  • service-name:是服务的名称,可以用于查找。它是区分大小写的。
  • port:是使用这个服务的端口号(以十进制表示)。
  • protocol:是使用的协议类型,匹配 protocols 文件中的值。通常是 TCP 或 UDP。
  • aliases:是一个可选的值,是这个服务另外的名字。同样是区分大小写的。

九、/etc/protocols

  • 这个文件是协议定义描述文件,是一个普通的 ASCII 码文本文件,用于描述各种各样 的因特网网络协议。这些数字出现在 IP 报文头中的协议域。

文件内容及格式

  • 每一行使用以下格式(这3个域由空格或制表符分隔,并且空行被忽略。如果一行包含一个“#”,则“#”后的内容部分被忽略):
protocol number aliases ...
  • “protocol”字段是协议的名称,常见的协议有 IP、TCP、UDP、ICMP、IGMP 和 GRE 等。
  • “number”是这个协议的数字号码,将出现在 IP 报头。用十进制数字表示。
  • “aliases”是协议的选项。

  • 我是小董,V公众点击"笔记白嫖"解锁更多OpenWrt资料内容。

相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页