Linux(Ubuntu)的网络配置


修改IP地址
有两种方法,一种是使用ifconfig命令,另一种是直接修改网络相关的配置文件。

ifconfig命令
例如:sudo ifconfig eth0 192.168.108.54 netmask 255.255.255.0
如果网卡eth0尚未启动,则需要在末尾添加up,表示配置完成后启动该网卡。

修改配置文件
Ubuntu14.04下跟IP相关的配置在文件/etc/network/interfaces中,其原始内容如下:


# interfaces(5) file used by ifup(8) and ifdown(8)

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

lo表示的是环回地址127.0.0.1,lo本身不代表实际的物理网卡,而是定义的loopback虚拟网络设备,能使TCP/IP通过127.0.0.1来访问本机。eth0是网卡设备名,代表了本机的第一块网卡。第二块网卡的名字是eth1,后面的以此类推。想要修改网卡设备名可以通过编辑文件/etc/udev/rules.d/70-persistent-net.rules来完成(目前只能确定可以修改eth0本身,而eth1等还无法确定能不能用它来修改)。
eth0这部分最重要的参数是dhcp,他表示动态获取ip地址,本机的ip将由DHCP服务器自动分配IP。如果想要改成静态IP,需要将dhcp改为static,然后在下面增加一系列参数,完整配置如下:

auto eth0
iface eth0 inet static
address 192.168.108.64
netmask 255.255.255.0
gateway 192.168.108.1

其中address就是你想要分配的IP,gateway是网关地址。修改完之后可能需要重启网络服务:sudo /etc/init.d/networking restart。
我们看到该文件开头的注释,意思是本文件是为ifup和ifdown命令服务的。这两个命令可以开启或关闭对应的网卡,它们是简化版的ifconfig命令:ifconfig eth0 up/down。
当需要增加一个eth1时,仅仅在这个文件中增加eth1相关的内容是不够的,修改之前必须要保证相应的网卡已经存在,不然使用ifup时会报错:

Ignoring unknown interface eth1=eth1.
或
Cannot find device "eth1"
Failed to bring up eth1.

查看网卡相关的信息,使用命令:lspci或者lshw。
一般情况下,一台机器里面只有一张网卡,这跟虚拟机虚拟出来的操作系统是不太一样的,比如使用virtualbox可以随时给虚拟机增加虚拟网卡,然后就可以修改这个文件,但是对物理机却只能安装一个真正的网卡。

修改主机名
前面说过使用hostname命令可以查看主机名,但是它其实还可以临时修改主机名,方法就是在后面直接跟新的主机名,如下:

m@meng:~/program/C_codes$ hostname
meng
m@meng:~/program/C_codes$ sudo hostname m
m@meng:~/program/C_codes$ hostname 
m

那么主机名到底是指什么呢?简单的说,主机名就是局域网中的域名。我们知道,在公网上,DNS服务器将域名映射到某个IP上,而在局域网中,将主机名映射到IP上。IP太长难于记忆,公网中使用了域名来简化;而在局域网中,每台主机也是有自己的局域网IP的,这些IP大都以10或192开头,它们同样难以记忆,于是就有了主机名。
hostname命令修改后的主机名在重启之后会失效,永久改变的方法是修改/etc/hostname文件。
但是,我其实到现在还不明白这个主机名到底有啥鸟用?比如我自己的机器的主机名是big,但是局域网中其他机器要访问我的机器却不能通过big这个名字。这样一来,似乎上面的说法就是错的。
这里牵涉到经常容易混淆的另一个文件:/etc/hosts,其典型内容如下:

127.0.0.1   localhost
127.0.1.1   sys.localadmin sys 
192.168.108.142 g308pc4
192.168.108.146 meng localhost

这个文件说白了就是一个映射表,从IP到一个随便起的名字之间的映射。最重要的一点就是,每台机器的这个文件的内容是不同的,具体是指,同一个IP,在不同的机器起的名字不一样——完全没有必要给某个IP起的名字是那个IP对应的hostname。这样一来,hostname还有个屁用?这个问题我以后再弄明白。
关于/etc/hosts,再多说一点:hosts文件的作用相当于DNS,提供IP地址hostname的对应。早期的互联网计算机少,单机hosts文件里足够存放所有联网计算机。不过随着互联网的发展,这就远远不够了。于是就出现了分布式的DNS系统。由DNS服务器来提供类似的IP地址到域名的对应。Linux系统在向DNS服务器发出域名解析请求之前会查询/etc/hosts文件,如果里面有相应的记录,就会使用hosts里面的记录。由此,/etc/hosts于设置hostname是没直接关系的,仅仅当你要在本机上用新的hostname来映射自己的IP时候才会用到/etc/hosts文件。

相关内容