Linux网络配置资料收集

目录

第一篇 Linux下interface文件修改
第二篇 Linux网络设置高级指南
第三篇 wpa_supplicant的用法

Debian官方资料:http://www.debian.org/doc/manuals/debian-reference/ch05.en.html

第一篇 Linux下interface文件修改

我们来通过一些例子,来记录interfaces文件的书写。详情可参照man interfaces。

设置常用ethernet参数

– auto是给ifup做识别用的,当我们使用ifup -a来打开网络设备的时候(init里面启动网卡的方式,以及networking start,都是使用ifup -a),ifup会找这些auto的项来进行操作。

– iface后面是logical interfaces的名字,如果我们没有使用过maping,那这里的名字就是物理设备的名字;在设备名字之后的,是这个接口使用的address family,inet或inetv6。最后的static是静态IP的意思,如果需要DHCP,把static换成DHCP就可以了。

– 从iface下一行起,就是具体这一个interface的参数设置了;格式没有缩进也是可以的,只是为了看起来清晰,但是,具体哪一个接口的设置参数,必须是跟在它的iface之后的。上面就是一些常见的设置项,应该不用过多解释。

– 作为无线设备的具体参数,我们可以直接在这里传ssid和passwd过去。注意,这里的ssid和passwd是wpa加密用的,这里需要wpa-supplicant支援。

另外,除了常见的loopback、static和dhcp外,网口的method还可以是以下几种(具体自己了解下吧):

1、manual,如果不是在默认这些启动方式行列,可以用manual方式,然后在随后的up,或者down里面定义我们如何来操作它;后面有一个例子。

2、bootp,boot protocol是无盘工作站启动时使用的协议,它向host发送请求,得到ip以及启动镜像让后把自己启动起来。

3、ppp,point to point protocol是一种数据链路层协议,被多种物理网络采用,常被ISP用作网络接入控制。

4、wvdial,操作猫来完成ppp拨号的机制。

启用网口时增加新路由

这个是我们在进行ifup或ifdown时,可以伴随执行一些什么动作,这里是直接执行添加路由。

up和down之后可以跟任何的command,分别是我们执行ifup和ifdown时,需要同时进行一些其他的什么操作。这里是添加和删除路由。

另外还有,pre-up,pre-down,post-up,post-down,他们分别表示,需要为ifup做什么准备,需要为ifdown做什么准备,ifup完成之后我们还要做些什么,ifdown之后我们还要做些社么。

我们还可以在/etc/network/目录下还可以建目录if-up.d,if-down.d等等文件夹,在文件夹下我们可以放置我们要执行的脚本。比如,我们可以把配置无线网卡的wpa_supplicant相关脚本放在if-pre-up.d里面。

mapping机制

在debian系统里面,会存在网卡启动顺序的问题,所以,到底哪块网卡是eth0,哪块网卡是eth0还真说不上来,这时候mapping就很有用了。

上面的代码先是根据MAC地址,给每块网卡起了一个逻辑名,然后根据逻辑名来对网卡进行配置。

必须的是,每个mapping必含有一个script。

第二篇 Linux网络设置高级指南

本文面向的是被Linux复杂的有线无线网络架构弄得头昏脑胀;或者被网上半吊子的教程弄得晕头转向;或者厌倦了Network Manager之类图形界面无穷尽的BUG(很多抄袭的是Windows,画虎不成反类猫,在一些概念上就存在错误);或者想要了解一些技术细节的,像一样我渴望获得完全驾驭的能力而不是隔靴搔痒的人。

本文需要一定的计算机网络和Linux基础,其中的大部分内容很新,基于2.6内核之后的新架构。

Linux不同发行版的软件包名称、配置文件的命名和位置都不尽相同,本文基于的是Debian/Ubuntu系统,很多内容参考了Debian Reference的第5章。

当然,本文依旧有很多不足之处,例如没有深入到Linux内核机制中去,这就需要以后进一步完善了。

静态设置

静态设置的意思是所有配置都写在配置文件中,由操作系统自动进行设置。

静态设置依赖udev、ifupdown、isc-dhcp-client、resolvconf、wireless-tools、wpasupplicant等软件包。

首先,网络的正常运行依赖于硬件设备。在系统引导或者热插拔的时候,内核通过udev将网络设备映射到用户空间的sysfs虚拟文件系统。例如:

可以看到,系统当前存在三个网络设备:lo为回环设备;eth0为有线网卡;wlan0为无线网卡。遵循Unix“一切皆文件”的思想,其它工具都是直接或者间接地修改这些虚拟文件来达到设置目的的。

/etc/network/interfaces文件记录了所有的静态配置信息。内核在引导的时候,会自动启动标志为“auto”的设备,例如:

而如果设备标志为“allow-hotplug”,那么内核在检测到热插拔事件的时候,也会自动启动。例如:

allow-hotplug lo
allow-hotplug eth0
allow-hotplug wlan0

因为回环设备始终应该是存在的,所以/etc/network/interfaces文件的内容至少是:

内核启动网络设备调用的是ifupdown工具,而ifupdown工具也是依赖于/etc/network/interfaces配置文件的。

对于有线(Wired)设备,物理层和数据链路层无须操作系统干预,网卡根据CSMA/CD协议就能够自行设置,所以/etc/network/interfaces文件只需包含网络层以上的配置信息,例如IP地址、子网掩码、默认网关等。例如:

“默认网关”其实是路由的概念,在这里作为设备的一个属性,和IP地址子网掩码放在一起我觉得很不妥,很容易误导初学者,尤其是存在多网卡多IP地址的情况。

对于DNS,首先需要注意的是它属于应用层协议,和网络设备以及网络层并无直接联系。传统上Linux的DNS配置文件为/etc/resolv.conf,一行一个服务器IP地址。例如:

如果安装了resolvconf工具,那么DNS的配置会被接管,此时/etc/resolv.conf就变成了一个符号链接,链接到了resolvconf运行时候动态维护的一个文件。在这种情况下,DNS的配置也可以写到/etc/network/interfaces文件中了,例如:

ifupdown工具会自动调用resolvconf完成DNS设置。

此处我也甚觉不妥,因为上面讲过,DNS是应用层的概念,这样写的话让初学者觉得好像DNS是网络设备的属性一样(传统Linux还真是有很多不足之处)。

如果安装了isc-dhcp-client工具,那么/etc/network/interfaces文件中就可以直接配置DHCP,例如:

isc-dhcp-client有自己的配置文件,可以控制从DHCP服务器上获取哪些信息(例如DNS服务器地址)。

ifupdown工具会自动调用isc-dhcp-client完成DHCP设置。

此处需要注意的是:不论resolvconf是否存在,dhclient均会直接修改/etc/resolv.conf文件(不管它是不是一个链接),不过一般情况下也没有什么问题。

对于无线(Wireless)设备,工作方式和有线设备有很大的不同(不是插上网线就能直接用的)。数据链路层的连接必须由操作系统协同完成,例如连接哪个SSID、使用哪条信道、采用什么认证方式(WEP、WPA…)。这些链路层配置信息也可以写到/etc/network/interfaces文件中以供ifupdown工具使用。

ifupdown工具会自动调用wireless-tools完成WEP设置。

准静态设置

静态设置适合于网络环境固定的情况,例如服务器、办公室电脑等。如果网络环境经常有变动,但是变动都是已知的,那么可以在/etc/network/interfaces文件中写入不固定的网络配置,这些配置不对应到具体的硬件设备名,例如:

可以手工运行ifupdown工具切换配置,例如将eth0切换到config1:

将eth0切换到config2:

动态设置

如果网络环境经常变动而且是未知的,或者为了使用脚本等自动化工具达到完全驾驭网络的能力,那么静态和准静态设置就捉襟见肘了。

动态设置依赖iproute、isc-dhcp-client、wireless-tools、wpasupplicant等软件包,直接使用命令行,以达到最大的灵活性。

首先,/etc/network/interfaces文件仅保留回环设备lo的配置信息:

iproute替代了过时的net-tools等工具(ifconfig)。

通过“ip link”命令可以查询到当前所有网络设备的状态和参数,例如:

可以看到当前eth0和wlan0设备都是处于关闭状态(这是显然的,因为/etc/network/interfaces文件中已经没有它们的配置信息了)。

使用“ip link set 设备名 up”命令可以启动设备,使用“ip link set 设备名 down”命令可以关闭设备。

对于有线(Wired)设备,上面讲过,无须做额外设置,链路层就可以正常工作了。

对于无线(Wireless)设备,需要使用wireless-tools、wpasupplicant完成链路层的连接。

例如扫描当前可用都无线连接,可以使用wavemon工具,或者使用“iwlist scan”命令。

例如连接Ad-Hoc。双方的essid、channel、cell(也就是iwconfig中的ap)均必须一致。双方创建连接谁先谁后都没有关系。例如:

以上命令即刻生效。

例如连接WEP认证的无线网络:

如果要连接WPA认证的无线网络,wireless-tools就无可奈何了,必须使用wpasupplicant。

wpasupplicant并不是像wireless-tools一样简单地用命令行配一配就可以了,它必须先启动一个服务进程,然后使用另外一个命令行工具对服务进程进行设置,而且在WIFI连接期间该服务进程必须始终运行着。

为什么不和wireless-tools做在一起呢?真怪异,真恶心!

服务进程可以以后台方式启动,也可以以前台方式启动。

后台方式:

其中:-i指定设备名;-D指定认证协议;-s -B指定在后台运行,并且调试输出到syslog中;-C参数指定“ctrl_interface”的位置,注意,wpa_supplicant是可以有配置文件的,而且配置文件中可以记录WIFI的静态配置,类似于/etc/network/interfaces的功能,但是我们这里用不到,在没有配置文件的情况下,“ctrl_interface”是必不可少的,wpa_cli通过它与之交互。

前台方式:

其中,-dd表示输出更详细的调试信息。

然后使用wpa_cli进行设置。wpa_cli可以工作在交互模式,也可以命令行模式。例如在交互模式下执行如下命令加入并启用网络:

如果要手工设置地址,那么,例如:

第一行增加IP地址,第二行设置默认路由。

最后,使用文本编辑器或者脚本修改/etc/resolv.conf的DNS设置,例如:

搞定,可以使用iwconfig和ifconfig查看当前设置。例如:

现在,写脚本就游刃有余了,例如下面就是我的笔记本电脑在家里的设置脚本:

第三篇 wpa_supplicant的用法

最近要用到wpa_supplicant,但是在网上查询了一下,很多都是关于wpa_supplicant的开发,很少涉及到使用方面,个人通过各种资料总结和试验了一番。

命令格式:

驱动(一般常使用的就是wext):

使用linux通用驱动,网络接口为wlan0,读取文件为/data/misc/wifi/wpa_supplicant.conf, 输出带时间戳的调试信息到/data/misc/wifi/log.txt中,执行无线配置

Leave a Reply

*