建站服务器
linux 网络配置
一些配置文件:
/etc/services:服务名称和端口配置文件
/etc/hosts :最早主机名对应ip的配置文件
很过人一提到更改hostname首先就想到修改/etc/hosts文件,认为hostname的配置文件就是/etc/hosts。其实不是的。
hosts文件的作用相当如dns,提供ip地址到hostname的对应。早期的互联网计算机少,单机hosts文件里足够存放所有联网计算机。不过随着互联网的发展,这就远远不够了。于是就出现了分布式的dns系统。由dns服务器来提供类似的ip地址到域名的对应。具体可以man hosts。
linux系统在向dns服务器发出域名解析请求之前会查询/etc/hosts文件,如果里面有相应的记录,就会使用hosts里面的记录。/etc/hosts文件通常里面包含这一条记录:
127.0.0.1 localhost.localdomain localhost
hosts文件格式是一行一条记录,分别是 ip地址 hostname aliases,三者用空白字符分隔,aliases可选。
127.0.0.1到localhost这一条建议不要修改,因为很多应用程序会用到这个,比如sendmail,修改之后这些程序可能就无法正常运行。
修改hostname后,如果想要在本机上用newhostname来访问,就必须在/etc/hosts文件里添加一条newhostname的记录。比如我的eth0的ip是192.168.1.61,我将hosts文件修改如下:
#hostname blog.infernor.net
# cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.1.61 blog.infernor.net blog
这样,我就可以通过blog或者blog.infernor.net来访问本机。
从上面这些来看,/etc/hosts于设置hostname是没直接关系的,仅仅当你要在本机上用新的hostname来访问自己的时候才会用到/etc/hosts文件。两者没有必然的联系。
rhel还有个问题。
我开始在测试的时候,只修改/etc/hosts,里面添加 192.168.1.61 blog.infernor.net blog,而/etc/sysconfig/network维持原状,也就是里面的hostname=localhost.localdomain。我重启系统后居然发现hostname给修改成了blog.infernor.net。这样看的话,倒真觉得/etc/hosts是hostname的配置文件。后来终于在/etc/rc.d/rc.sysinit这个启动脚本里发现了问题的所在。
rc.sysinit文件里一开始就设置了hostname
if [ -f /etc/sysconfig/network ]; then
. /etc/sysconfig/network
fi
if [ -z $hostname -o $hostname = (none) ]; then
hostname=localhost
fi
确实使用了/etc/sysconfig/network里的hostname值。不过后面还有一段关于设置hostname的
ipaddr=
if [ $hostname = localhost -o $hostname = localhost.localdomain ]
; then
ipaddr=$(ip addr show to 0/0 scope global | awk \\\’/[[:space:]]inet
/ { print gensub(/.*,,g,$2) }\\\’)
if [ -n $ipaddr ]; then
eval $(ipcalc -h $ipaddr 2>/dev/null)
hostname ${hostname}
fi
fi
脚本判断hostname是否为localhost或者localhost.localdomain,如果是的话,将会使用接口ip地址对应的 hostname来重新设置系统的hostname。问题就出在这里,我的/etc/sysconfig/network默认的hostname是 localhost.localdomain,eth0的ip是192.168.1.61,而/etc/hosts里有192.168.1.61的记录。于是就用192.168.1.61这条记录来替换了hostname。
估计这也是很多人将/etc/hosts误以为是hostname的配置文件的原因。
hostname带选项查询
hostname的-s -f -i等等选项都用到了/etc/hosts或者dns系统,跟我们讨论的hostname有点远了,也容易产生误会。具体可以man hostname查看。
总结一下修改主机名最安全的方法:
1. 停止与主机名相关的软件运行,比如mysql。
2. 先使用 hostname newname 设置主机名。
3. 在/etc/hosts中修改或增加 ip newname 行,并检查原来127.0.0.1行localhost回环的设置。
4. 在/etc/sysconfig/network中修改hostname=newname。
5. 重新启动机器并确认是否修改成功。
============================================================================
/etc/sysconfig/network
$ cat /etc/sysconfig/network
networking=yes 是否起用网络
hostname=cloudweb26.idc1.haodf.net 主机名
networking_ipv6=no
============================================================================
/etc/resolv.conf: 本机dns解析
它是dns客户机配置文件,用于设置dns服务器的ip地址及dns域名,还包含了主机的域名搜索顺序。该文件是由域名解析 器(resolver,一个根据主机名解析ip地址的库)使用的配置文件。它的格式很简单,每行以一个关键字开头,后接一个或多个由空格隔开的参数。
resolv.conf的关键字主要有四个,分别是:
nameserver //定义dns服务器的ip地址
domain //定义本地域名
search //定义域名的搜索列表
sortlist //对返回的域名进行排序
下面我们给出一个/etc/resolv.conf的示例:
nameserver 10.3.3.99
nameserver 10.1.0.88
search idc1.baidu.net baidu.net
options single-request-reopen
最主要是nameserver关键字,如果没指定nameserver就找不到dns服务器,其它关键字是可选的。
nameserver 表示解析域名时使用该地址指定的主机为域名服务器。其中域名服务器是按照文件中出现的顺序来查询的,且只有当第一个nameserver没有反应时才查询下面的nameserver。
search 它的多个参数指明域名查询顺序。当要查询没有域名的主机,主机将在由search声明的域中分别查找。
domain 声明主机的域名。很多程序用到它,如邮件系统;当为没有域名的主机进行dns查询时,也要用到。如果没有域名,主机名将被使用,删除所有在第一个点( .)前面的内容。
domain和search不能共存;如果同时存在,后面出现的将会被使用。
sortlist 允许将得到域名结果进行特定的排序。它的参数为网络/掩码对,允许任意的排列顺序。
“search domainname.com”表示当提供了一个不包括完全域名的主机名时,在该主机名后添加domainname.com的后 缀;“nameserver”表示解析域名时使用该地址指定的主机为域名服务器。其中域名服务器是按照文件中出现的顺序来查询的。
其中domainname和search可同时存在,也可只有一个;nameserver可指定多个
========================================分隔线
/etc/nsswitch.conf :这个档案则是在『决定』先要使用 /etc/hosts 还是 /etc/resolv.conf 的设定!
============================================================================
# cat /etc/sysconfi
ip地址访问云服务器网站方舟云服务器要租什么性能的怎么样获得一个心仪的域名2020年gpu云服务器问题微信小程序怎么开商店个人还能申请商标吗有什么便宜的云服务器吗便宜刚刚开通的主机客户把数据上传后