2.3 项目实施
任务2-1 创建网络会话实例
RHEL和CentOS系统默认使用NetworkManager来提供网络服务,这是一种动态管理网络配置的守护进程,能够让网络设备保持连接状态。前面讲过,可以使用nmcli命令来管理Network Manager服务。nmcli是一款基于命令行的网络配置工具,功能丰富,参数众多。它可以轻松地查看网络信息或网络状态。
[root@RHEL7-1 ~]# nmcli connection show
NAME UUID TYPE DEVICE
ens33 9d5c53ac-93b5-41bb-af37-4908cce6dc31 802-3-ethernet --
另外,RHEL 7系统支持网络会话功能,允许用户在多个配置文件中快速切换(非常类似于firewalld防火墙服务中的区域技术)。我们在公司网络中使用笔记本电脑时需要手动指定网络的IP地址,回到家中则是使用DHCP自动分配IP地址。这就需要频繁地修改IP地址,但是使用网络会话功能后,一切就简单多了—只需在不同的使用环境中激活相应的网络会话,就可以实现网络配置信息的自动切换了。
可以使用nmcli命令并按照“connection add con-name type ifname”的格式来创建网络会话。假设将公司网络中的网络会话称为company,将家庭网络中的网络会话称为home,现在依次创建各自的网络会话。
① 使用con-name参数指定公司使用的网络会话名称company,然后依次用ifname参数指定本机的网卡名称(千万要以实际环境为准,不要照抄书上的ens33)。用autoconnect no参数设置该网络会话默认不被自动激活,以及用ip4及gw4参数手动指定网络的IP地址。
[root@RHEL7-1 ~]# nmcli connection add con-name company ifname ens33 autoconnect no type ethernet ip4 192.168.10.1/24 gw4 192.168.10.1 Connection 'company' (69bf7a9e-1295-456d-873b-505f0e89eba2) successfully added.
② 使用con-name参数指定家庭使用的网络会话名称home。因为我们想从外部DHCP服务器自动获得IP地址,因此这里不需要手动指定。
[root@RHEL7-1 ~]# nmcli connection add con-name home type ethernet ifname ens33
Connection 'home' (7a9f15fe-2f9c-47c6-a236-fc310e1af2c9) successfully added.
③ 成功创建网络会话后,可以使用nmcli命令查看创建的所有网络会话。
[root@RHEL7-1 ~]# nmcli connection show NAME UUID TYPE DEVICE ens33 9d5c53ac-93b5-41bb-af37-4908cce6dc31 802-3-ethernet ens33 virbr0 a3d2d523-5352-4ea9-974d-049fb7fd1c6e bridge virbr0 company 70823d95-a119-471b-a495-9f7364e3b452 802-3-ethernet -- home cc749b8d-31c6-492f-8e7a-81e95eacc733 802-3-ethernet --
④ 使用nmcli命令配置过的网络会话是永久生效的,这样当我们下班回家后,顺手启用home网络会话,网卡就能自动通过DHCP获取到IP地址了。
[root@RHEL7-1 ~]# nmcli connection up home Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6) [root@RHEL7-1 ~]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.167.34 netmask 255.255.255.0 broadcast 10.0.167.255 inet6 fe80::c70:8b8f:3261:6f18 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:66:42:8d txqueuelen 1000 (Ethernet) RX packets 457 bytes 41358 (40.3 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 131 bytes 17349 (16.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ……
⑤ 如果使用的是虚拟机,请把虚拟机系统的网卡(网络适配器)切换成桥接模式,如图2-17所示,然后重启虚拟机系统即可。
图2-17 设置虚拟机网卡的模式
⑥ 回到公司,可以停止home会话,启动company会话(连接)。
[root@RH EL7 -1 ~]# nmcli connection down home Connection 'home' successfully deactivated (D-Bus active path: /org/freedesktop/ Ne tworkManager/ActiveConnection/4) [root@RHEL7-1 ~]# nmcli connection up company Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManag er/ ActiveConnection/6) [root@RHEL7-1 ~]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.10.1 netmask 255.255.255.0 broadcast 192.168.10.255 inet6 fe80::7ce7:c434:4c95:7ddb pre fixlen 64 scopeid 0x20<link> ……
⑦ 如果要删除会话连接,则执行nmcli命令,再执行Edit a connection命令,然后选中要删除的会话,单击“Delete”按钮即可,如图2-18所示。
图2-18 删除网络会话连接
任务2-2 绑定两块网卡
一般来讲,生产环境必须提供7×24小时的网络传输服务。借助于网卡绑定技术,不仅可以提高网络传输速度,更重要的是,还可以确保在其中一块网卡出现故障时,依然可以正常提供网络服务。假设对两块网卡实施了绑定技术,这样在正常工作中它们会共同传输数据,使得网络传输的速度更快;而且即使有一块网卡突然出现了故障,另外一块网卡也会立即自动顶替上去,保证数据传输不会中断。
下面介绍如何绑定网卡。
① 在虚拟机系统中再添加一块网卡设备,请确保两块网卡都处在同一个网络连接中(即网卡模式相同),如图2-19和图2-20所示。只有处于相同模式的网卡设备,才可以绑定网卡,否则这两块网卡无法互相传送数据。
② 使用Vim文本编辑器配置网卡设备的绑定参数。网卡绑定的理论知识类似于RAID硬盘组,需要对参与绑定的网卡设备逐个进行“初始设置”。需要注意的是,这些原本独立的网卡设备此时需要被配置成为一块“从属”网卡,服务于“主”网卡,不应该再有自己的IP地址等信息。进行初始设置之后,它们就可以支持网卡绑定了(先使用ifconfig命令查询两块网卡的名称。在本例中,经查询得知,网卡名称为ens33和ens38)。
图2-19 在虚拟机中再添加一块网卡设备
图2-20 确保两块网卡处在同一个网络连接中(即网卡模式相同)
[root@RHEL7-1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 TYP E=Ethernet BOOTPROTO=none ONBOOT=yes USERCTL=no DEVICE=ens33 MASTER=bond0 SLAVE=yes [root@RHEL7-1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens38 TYPE=Ethernet BOOTPROTO=none ONBOOT=yes USERCTL=no DEVICE=ens38 MASTER=bond0 SLAVE=yes
还需要将绑定后的设备命名为bond0并把IP地址等信息填写进去,这样当用户访问相应服务时,实际上就是由这两块网卡设备在共同提供服务。
[root@RHEL7-1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-bond0
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
DEVICE=bond0
IPADDR=192.168.10.1
PREFIX=24
DNS=192.168.10.1
NM_CONTROLLED=no
③ 让Linux内核支持网卡绑定驱动。常见的网卡绑定驱动有3种模式—mode 0、mode 1和mode 6。下面以绑定两块网卡为例,讲解使用的情景。
● mode 0(平衡负载模式):平时两块网卡均工作,且自动备援,但需要在与服务器本地网卡相连的交换机设备上进行端口聚合来支持绑定技术。
● mode 1(自动备援模式):平时只有一块网卡工作,在它故障后自动替换为另外的网卡。
● mode6(平衡负载模式):平时两块网卡均工作,且自动备援,无须交换机设备提供辅助支持。
比如有一台用于提供NFS或者Samba服务的文件服务器,它所能提供的最大网络传输速度为100Mbit/s,但是访问该服务器的用户特别多,那么它的访问压力一定很大。在生产环境中,网络的可靠性是极为重要的,而且网络的传输速度也必须得以保证。针对这样的情况,比较好的选择就是mode 6网卡绑定驱动模式了。因为mode 6能够让两块网卡同时工作,当其中一块网卡出现故障后能自动备援,且无须交换机设备支援,从而提供了可靠的网络传输保障。
下面使用Vim文本编辑器创建一个用于网卡绑定的驱动文件,使得绑定后的bond0网卡设备能够支持绑定技术(bonding);同时定义网卡以mode 6模式进行绑定,且出现故障时自动切换的时间为100ms。
[root@RHEL7-1 ~]# vim /etc/modprobe.d/bond.conf
alias bond0 bonding
options bond0 miimon=100 mode=6
④ 重启网络服务后网卡绑定操作即可成功。在正常情况下,只有bond0网卡设备才会有IP地址等信息。
[root@RHEL7-1 ~]# systemctl restart network [root@RHEL7-1 ~]# ifconfig bond0: flags=5123<UP,BROADCAST,MASTER,MULTICAST> mtu 1500 inet 192.168.10.1 netmask 255.255.255.0 broadcast 192.168.10.255 ether 86:08:25:89:b4:6d txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether 00:0c:29:66:42:8d txqueuelen 1000 (Ethernet) RX packets 119 bytes 12615 (12.3 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens38: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether 00:0c:29:66:42:97 txqueuelen 1000 (Ethernet) RX packets 48 bytes 6681 (6.5 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ……
可以在本地主机执行ping 192.168.10.1命令检查网络的连通性。为了检验网卡绑定技术的自动备援功能,在虚拟机硬件配置中随机移除一块网卡设备,可以非常清晰地看到网卡切换的过程(一般只有1个数据丢包或不丢包),然后另外一块网卡会继续为用户提供服务。
[root@RHEL7-1 ~]# ping 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_ seq=1 ttl=64 time=0.171 ms
64 bytes from 192.168.10.1: icmp_ seq=2 ttl=64 time=0.048 ms
64 bytes from 192.168.10.1: icmp_ seq=3 ttl=64 time=0.059 ms
64 bytes from 192.168.10.1: icmp_ seq=4 ttl=64 time=0.049 ms
ping: sendmsg: Network is unreachable
--- 192.168.10.1 ping statistics ---
8 packets transmitted, 7 received, 12% packet loss, time 7006ms
rtt min/avg/max/mdev = 0.042/0.073/0.109/0.023 ms
注意:做完绑定网卡的实验后,为了不影响其他实训,请利用VM快照恢复到系统初始状态。或者删除绑定:删除网卡绑定的配置文件,利用系统菜单重新配置网络,然后重启系统。这个处理原则,也适用于其他改变常规状态的实验。
任务2-3 配置远程控制服务
1. 配置sshd服务
SSH(Secure shell)是一种能够以安全的方式提供远程登录的协议,也是目前远程管理Linux系统的首选方式。在此之前,一般使用FTP或Telnet来进行远程登录。但是因为它们以明文的形式在网络中传输账户密码和数据信息,因此很不安全,很容易受到黑客发起的中间人攻击,这轻则篡改传输的数据信息,重则直接抓取服务器的账户密码。
想要使用SSH协议来远程管理Linux系统,就需要部署配置sshd服务程序。sshd是基于SSH协议开发的一款远程管理服务程序,不仅使用起来方便快捷,而且能够提供两种安全验证的方法。
● 基于口令的验证—用账户和密码来验证登录。
● 基于密钥的验证—需要在本地生成密钥对,然后把密钥对中的公钥上传至服务器,并与服务器中的公钥比较。该方式相较来说更安全。
前文曾多次强调“Linux系统中的一切都是文件”,因此在Linux系统中修改服务程序的运行参数,实际上就是在修改程序配置文件的过程。sshd服务的配置信息保存在/etc/ssh/sshd_config文件中。运维人员一般会把保存最主要配置信息的文件称为主配置文件,而配置文件中有许多以井号开头的注释行,要想让这些配置参数生效,需要在修改参数后再去掉前面的井号。sshd服务配置文件包含的参数及作用如表2-2所示。
表2-2 sshd服务配置文件包含的参数及作用
现有计算机的情况如下。
● 计算机名为RHEL7-1,角色为RHEL 7服务器,IP地址为192.168.10.1/24。
● 计算机名为RHEL7-2,角色为RHEL 7客户机,IP地址为192.168.10.20/24。
● 特别注意两台虚拟机的网络配置方式一定要一致,本例中都改为:桥接模式。
在RHEL 7系统中,已经默认安装并启用了sshd服务程序。接下来使用ssh命令在RHEL7-2上远程连接RHEL7-1,其格式为“ssh [参数] 主机IP地址”。要退出登录则执行exit命令。在RHEL7-2上操作。
[root@RHEL7-2 ~]# ssh 192.168.10.1 The authenticity of host '192.168.10.1 (192.168.10.1)' can't be est ablished. ECDSA key fingerprint is SHA256:f7b2rHzLTyuvW4WHLjl3SRMIwkiUN+cN9y1yDb9wUbM. ECDSA key fingerprint is MD5:d1:69:a4:4f:a3:68:7c:f1:bd:4c:a8:b3:84:5c:50:19. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192. 168.10.1' (ECDSA) to the list of known hosts. root@192.168.10.1's password //此处输入远程主机 root 管理员的密码 Last login: Wed May 30 05:36:53 2018 from 192.168.10. [root@RHEL7-1 ~]# [root@RHEL7-1 ~]# exit logout Connection to 192.168.10.1 closed.
如果禁止以root管理员的身份远程登录到服务器,则可以大大降低被黑客暴力破解密码的概率。下面进行相应配置。
① 在RHEL7-1 SSH服务器上,首先使用Vim文本编辑器打开sshd服务的主配置文件,然后把第38行#PermitRootLogin yes参数前的井号(#)去掉,并把参数值yes改成no,这样就不再允许root管理员远程登录了。记得最后保存文件并退出。
[root@RHEL7-1 ~]# vim /etc/ssh/sshd_config
……
36
37 #LoginGraceTime 2m
38 PermitRootLogin no
39 #StrictModes yes
……
② 一般的服务程序并不会在配置文件修改之后立即获得最新的参数。如果想让新配置文件生效,则需要手动重启相应的服务程序。最好也将这个服务程序加入开机启动项中,这样系统在下一次启动时,该服务程序会自动运行,继续为用户提供服务。
[root@RHEL7-1 ~]# systemctl restart sshd [root@RHEL7-1 ~]# systemctl enable sshd
③ 当root管理员再次尝试访问sshd服务程序时,系统会提示不可访问的错误信息。仍然在RHEL7-2上测试。
[root@RHEL7-2 ~]# ssh 192.168.10.1
root@192.168.10.10's password //此处输入远程主机 root 管理员的密码
Permission denied, please try again.
注意:为了不影响下面的实训,请将/etc/ssh/sshd_config配置文件的更改恢复到初始状态。
2. 安全密钥验证
加密是对信息进行编码和解码的技术,在传输数据时,如果担心被他人监听或截获,就可以在传输前先使用公钥对数据进行加密处理,再进行传送。这样,只有掌握私钥的用户,才能解密这段数据,除此之外的其他人即便截获了数据,一般也很难将其破译为明文信息。
在生产环境中使用密码验证口令存在被暴力破解或嗅探截获的风险。如果正确配置了密钥验证方式,那么sshd服务程序将更加安全。
下面使用密钥验证方式,以用户student身份登录SSH服务器,具体配置如下。
① 在服务器RHEL7-1上建立用户student,并设置密码。
[root@RHEL7-1 ~]# useradd student [root@RHEL7-1 ~]# passwd student
② 在客户端主机RHEL7-2中生成“密钥对”。查看公钥id_rsa.pub和私钥id_rsa。
[root@RHEL7-2 ~]# sh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa)//按回车键或设置密钥的存储路径 Enter passphrase (empty for no passphrase)//直接按回车键或设置密钥的密码 Enter same passphrase again//再次按回车键或设置密钥的密码 Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:jSb1Z223Gp2j9HlDNMvXKwptRXR5A8vMnjCtCYPCTHs root@RHEL7-1 The key's randomart image is: +---[RSA 2048]----+ | . o...| | + . . * oo.| | = E.o o B o| | o. +o B..o | | . S ooo+= =| | o .o...==| | . o o.=o| | o ..=o+| | ..o.oo| +----[SHA256]-----+ [root@RHEL7-2 ~]# cat /root/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCurhcVb9GHKP4taKQMuJRdLLKTAVnC4f9Y9H2Or4rLx3Y CqsBVYUUn4gSzi8LAcKPcPdBZ817Y4a2OuOVmNW+hpTR9vfwwuGOiU1Fu4Sf5/14qgkd5EreUjE/KIPlZVNX904 blbIJ90yu6J3CVz6opAdzdrxckstWrMSlp68SIhi517OVqQxzA+2G7uCkplh3pbtLCKlz6ck6x0zXd7MBgR9S7n wm1DjHl5NWQ+542Z++MA8QJ9CpXyHDA54oEVrQoLitdWEYItcJIEqowIHM99L86vSCtKzhfD4VWvfLnMiO1Utos tQfpLazjXoU/XVp1fkfYtc7FFl+uSAxIO1nJ root@RHEL7-2 [root@RHEL7-2 ~]# cat /root/.ssh/id_rsa
③ 把客户端主机RHEL7-2中生成的公钥文件传送至远程主机。
[root@RHEL7-2 ~]# ssh-copy-id student@192.168.10.1
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out
any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted
now it is to install the new keys
student@192.168.10.1's password//此处输入远程服务器密码
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'student@192.168.10.1'"
and check to make sure that only the key(s) you wanted were added.
④ 设置服务器RHEL7-1(第65行左右),使其只允许密钥验证,拒绝传统的口令验证方式。将“PasswordAuthentication yes”改为“PasswordAuthentication no”。记得在修改配置文件后保存并重启sshd服务程序。
[root@RHEL7-1 ~]# vim /etc/ssh/sshd_config …… 74 62 # To disable tunneled clear text passwords, change to no here! 63 #PasswordAuthentication yes 64 #PermitEmptyPasswords no 65 PasswordAuthentication no 66 …… [root@RHEL7-1 ~]# systemctl restart sshd
⑤ 在客户端RHEL7-2上尝试使用student用户远程登录到服务器,此时无须输入密码也可成功登录。同时利用ifconfig命令可查看到ens33的IP地址是192.168.10.1,即RHEL7-1的网卡和IP地址,说明已成功登录到了远程服务器RHEL7-1上。
[root@RHEL7-2 ~]# ssh student@ 192.168.10.1 Last failed login: Sat Jul 14 20:14:22 CST 2018 from 192.168.10.20 on ssh:notty There were 6 failed login attempts since the last successful login. [student@RHEL7-1 ~]$ ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.10.1 netmask 255.255.255.0 broadcast 192.168.10.255 inet6 fe80::4552:1294:af20:24c6 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:2b:88:d8 txqueuelen 1000 (Ethernet) ……
⑥ 在RHEL7-1上查看RHEL7-2客户机的公钥是否传送成功。本例成功传送。
[root@RHEL7-1 ~]# cat /home/student/.ssh/authorized_keys ssh -rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCurhcVb9GHKP4taKQMuJRdLLKTAVnC4f9Y9H2Or4rLx3Y CqsBVYUUn4gSzi8LAcKPcPdBZ817Y4a2OuOVmNW+hpTR9vfwwuGOiU1Fu4Sf5/14qgkd5EreUjE/KIPlZVNX904 blbIJ90yu6J3CVz6opAdzdrxckstWrMSlp68SIhi517OVqQxzA+2G7uCkplh3pbtLCKlz6ck6x0zXd7MBgR9S7n wm1DjHl5NWQ+542Z++MA8QJ9CpXyHDA54oEVrQoLitdWEYItcJIEqowIHM99L86vSCtKzhfD4VWvfLnMiO1Utos tQfpLazjXoU/XVp1fkfYtc7FFl+uSAxIO1nJ root@RHEL7-2
3. 远程传输命令
scp(secure copy)是一个基于SSH协议在网络之间进行安全传输的命令,其格式为“scp[参数] 本地文件 远程账户@远程IP地址:远程目录”。
与cp命令不同,cp命令只能在本地硬盘中复制文件,而scp不仅能够通过网络传送数据,而且所有的数据都将进行加密处理。例如,如果想把一些文件通过网络从一台主机传递到其他主机,这两台主机又恰巧是Linux系统,这时使用scp命令就可以轻松完成文件的传递了。scp命令中可用的参数及作用如表2-3所示。
表2-3 scp命令中可用的参数及作用
在使用scp命令把文件从本地复制到远程主机时,首先需要以绝对路径的形式写清本地文件的存放位置。如果要传送整个文件夹内的所有数据,还需要额外添加参数-r进行递归操作,然后写上要传送到的远程主机的IP地址,远程服务器便会要求进行身份验证。当前用户名称为root,密码则为远程服务器的密码。如果想使用指定用户的身份进行验证,可使用“用户名@主机地址”的参数格式。最后需要在远程主机的IP地址后面添加冒号,并在后面写上要传送到远程主机的哪个文件夹中。只要参数正确并且成功验证了用户身份,就可开始传送工作。下面在RHEL7-1上,向远程主机RHEL7-2(192.168.10.20)传输文件。
[root@RHEL7-1 ~]# echo "Welcome to smile .com" > mytest.txt [root@RHEL7-1 ~]# scp /root/mytest.txt 192.168.10.20:/home root@192.168.10.20's password //此处输入远程服务器中 root 管理员的密码 mytest.txt 100% 21 34.9KB/s 00:00
此外,还可以使用scp命令把远程主机上的文件下载到本地主机,其命令格式为“scp [参数] 远程用户@远程IP地址:远程文件 本地目录”。例如,可以把远程主机的系统版本信息文件下载下来,这样就无须先登录远程主机,再传送文件了,也就省去了很多周折。
[root@RHEL7-1 ~]# scp 192.168.10.20:/etc/redhat -release /root root@192.168.10.20's password//此处输入远程服务器中 root 管理员的密码 redhat-release 100% 52 55.5KB/s 00:00 [root@RHEL7-1 ~]# cat redhat-release Red Hat Enterprise Linux Server release 7.4 (Maipo)
提示:编辑/etc/resolv.conf文件也可以更改DNS服务器。使用ifconfig可以配置临时生效的IP地址等信息。由于这些内容已经不常使用,所以不再详述,请参考相关内容或在本课程的QQ研讨群里讨论。
使用ifconfig配置IP地址实例如下(重启计算机失效)。
[root@RHEL7-2 ~]# ifconfig ens38 192.168.10.10 [root@RHEL7-2 ~]# ifconfig ens38 192.168.10.10 netmask 255.255.255.0 [root@RHEL7-2 ~]# ifconfig ens38 192.168.10.10 netmask 255.255.255.0 broadcast 192.168.10.255