การบริหารจัดการ ระบบเครือข่ายบน Linux (Linux Network Service)
บน CentOS7 จะมีการใช้งาน NetworkManager Service daemon สำหรับการควบคุม และการบริหารจัดการเครือข่าย สำหรับการใช้งาน Linux ในการทดสอบ จากบทก่อนหน้านี้
cd sshlab
vagrant ssh client
[vagrant@client ~]$ sudo su -
[root@client ~]#
1 แสดง Network Interface ด้วยคำสั่ง
[root@client ~]# ip link
[root@client ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:37:f8:46 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3
valid_lft 78893sec preferred_lft 78893sec
inet6 fe80::1b1b:543b:db0b:ff0d/64 scope link
valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:7e:96:cc brd ff:ff:ff:ff:ff:ff
inet 192.168.33.20/24 brd 192.168.33.255 scope global enp0s8
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe7e:96cc/64 scope link
valid_lft forever preferred_lft forever
[root@client ~]# ip addr show enp0s8
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:7e:96:cc brd ff:ff:ff:ff:ff:ff
inet 192.168.33.20/24 brd 192.168.33.255 scope global enp0s8
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe7e:96cc/64 scope link
valid_lft forever preferred_lft forever
2 คำสั่ง nmcli เป็นคำสั่งที่ใช้ติดต่อกับ NetworkManager Deamon เป็นคำสั่งที่มีความสำคัญมากในการใช้งานสำหรับ SystemAdmin
[root@client ~]# nmcli dev status
DEVICE TYPE STATE CONNECTION
enp0s3 ethernet connected enp0s3
enp0s8 ethernet connected System enp0s8
lo loopback unmanaged --
[root@client ~]# nmcli connection show
[root@client ~]# nmcli con show
NAME UUID TYPE DEVICE
System enp0s8 00cb8299-feb9-55b6-a378-3fdc720e0bc6 802-3-ethernet enp0s8
enp0s3 5c54f4d1-1c6a-4bb0-9a23-8eaad898f751 802-3-ethernet enp0s3
[root@client ~]# nmcli connection show "System enp0s8" | grep ipv4
ipv4.method: manual
ipv4.dns:
ipv4.dns-search:
ipv4.dns-options: "single-request-reopen"
ipv4.dns-priority: 0
ipv4.addresses: 192.168.33.20/24
ipv4.gateway: --
ipv4.routes:
ipv4.route-metric: -1
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: yes
ipv4.dhcp-client-id: --
ipv4.dhcp-timeout: 0
ipv4.dhcp-send-hostname: yes
ipv4.dhcp-hostname: --
ipv4.dhcp-fqdn: --
ipv4.never-default: no
ipv4.may-fail: yes
ipv4.dad-timeout: -1 (default)
3 ไฟล์ที่เกี่ยวข้องกัน เป็น static file ใน /etc/sysconfig/network-scripts/
[root@client ~]# ls -l /etc/sysconfig/network-scripts/ifcfg-*
-rw-r--r--. 1 root root 312 Nov 20 14:19 /etc/sysconfig/network-scripts/ifcfg-enp0s3
-rw-------. 1 vagrant vagrant 216 Nov 20 14:19 /etc/sysconfig/network-scripts/ifcfg-enp0s8
-rw-r--r--. 1 root root 254 Nov 20 14:19 /etc/sysconfig/network-scripts/ifcfg-lo
[root@client ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s8
#VAGRANT-BEGIN
# The contents below are automatically generated by Vagrant. Do not modify.
NM_CONTROLLED=yes
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.33.20
NETMASK=255.255.255.0
DEVICE=enp0s8
PEERDNS=no
#VAGRANT-END
4 ให้ทำการ ลบ connection ทิ้งไปก่อน แล้วดูผลกระทบ
[root@client ~]# nmcli connection delete "System enp0s8"
Connection 'System enp0s8' (00cb8299-feb9-55b6-a378-3fdc720e0bc6) successfully deleted.
ผลกระทบ 1 Device จะเป็น อิสระ ไม่ได้ไปเกาะกับ connection
[root@client ~]# nmcli dev status
DEVICE TYPE STATE CONNECTION
enp0s3 ethernet connected enp0s3
enp0s8 ethernet disconnected --
lo loopback unmanaged --
ผลกระทบ 2 Static file ที่บ่งบอกสถานะ ถูกลบไปด้วย
[root@client ~]# ls -l /etc/sysconfig/network-scripts/ifcfg-*
-rw-r--r--. 1 root root 312 Nov 20 14:19 /etc/sysconfig/network-scripts/ifcfg-enp0s3
-rw-r--r--. 1 root root 254 Nov 20 14:19 /etc/sysconfig/network-scripts/ifcfg-lo
ผลกระทบ 3 ip หายไปด้วย
# ip a s enp0s8
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:7e:96:cc brd ff:ff:ff:ff:ff:ff
5 สร้าง connection ใหม่
[root@client ~]# nmcli connection add type ethernet con-name my-enp0s8 ifname enp0s8
Connection 'my-enp0s8' (19954a6c-66e5-4f6e-ab16-837460279014) successfully added.
[root@client ~]# nmcli con mod -h
6 กำหนดค่าที่ต้องการให้แก่ connection
[root@client ~]# nmcli con mod my-enp0s8 ipv4.method manual ipv4.addr "192.168.33.20/24"
[root@client ~]# nmcli con show my-enp0s8 | grep ipv4
[root@client ~]# nmcli con show my-enp0s8 | grep connection.autoconnect
[root@client ~]# nmcli con down my-enp0s8
[root@client ~]# nmcli con up my-enp0s8
[root@client ~]# ip a s enp0s8
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:7e:96:cc brd ff:ff:ff:ff:ff:ff
inet 192.168.33.20/24 brd 192.168.33.255 scope global enp0s8
valid_lft forever preferred_lft forever
inet6 fe80::88e:690d:fd8:9bb9/64 scope link
valid_lft forever preferred_lft forever
[root@client ~]# ls -l /etc/sysconfig/network-scripts/ifcfg-*
-rw-r--r--. 1 root root 312 Nov 20 14:19 /etc/sysconfig/network-scripts/ifcfg-enp0s3
-rw-r--r--. 1 root root 254 Nov 20 14:19 /etc/sysconfig/network-scripts/ifcfg-lo
-rw-r--r--. 1 root root 319 Nov 20 17:00 /etc/sysconfig/network-scripts/ifcfg-my-enp0s8
[root@client ~]# cat /etc/sysconfig/network-scripts/ifcfg-my-enp0s8
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=my-enp0s8
UUID=19954a6c-66e5-4f6e-ab16-837460279014
DEVICE=enp0s8
ONBOOT=yes
IPADDR=192.168.33.20
PREFIX=24
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
ก่อน Centos 7 ที่ยังไม่มีคำสั่ง nmcli เราจะต้องแก้ไข static file โดยตรง แต่ต่อมาเมื่อ service NetworkManager daemon ถูกนำใช้งาน จะไม่ต้องแก้ static file โดยตรง
หมายเหตุ การใช้งาน nmcli สามารถกำหนด ip4 ได้ตอนสร้างได้เลย
# nmcli con add con-name net-eth0 ifname eth0 type ethernet ip4 192.168.1.10/24 gw4 192.168.1.1
แต่หากใช้คำสั่ง nmcli con mod ต้องใช้การกำหนดค่าให้แก่ ipv4
# nmcli con mod net-eth0 ipv4.addresses 192.168.1.10/24
# nmcli con mod net-eth0 ipv4.gateway 192.168.1.1
# nmcli con mod net-eth0 ipv4.method manual
# nmcli con up net-eth0
ตรวจสอบ Gateway
[root@client ~]# ip r
default via 10.0.2.2 dev enp0s3 proto static metric 100
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 metric 100
192.168.33.0/24 dev enp0s8 proto kernel scope link src 192.168.33.20 metric 100
ความสัมพันธระหว่าง Firewall Zone และ network Interface
# systemctl start firewalld
# firewall-cmd --get-default-zone
public
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3 enp0s8
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
จะเห็นว่า traffic ที่เข้ามายัง Linux ผ่านทาง interface enp0s3 enp0s8 จะผ่านไปยัง zone เราจะรู้ได้อย่างไรว่าตอนนี้ Linux มี Firewall zone ทั้งหมด กี่โซน สามารถทำได้โดยการใช้ option --get-zones และ --list-all-zones
# firewall-cmd --get-zones
work drop internal external trusted home dmz public block
# firewall-cmd --list-all-zones
ภายในแต่ละ โซนก็มีค่ากำหนด service default ที่ต่างกัน เช่น zone work
work
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
ต่อมา จะทำการเปลี่ยนให้ traffic ที่ผ่านมาทาง enp0s8 ให้ไปยัง Zone work แทน Zone public
โดยบอกให้ firewall-cmd และ NetworkManager รับทราบ
# firewall-cmd --permanent --zone=work --change-interface=enp0s8
The interface is under control of NetworkManager, setting zone to 'work'.
success
# nmcli con mod my-enp0s8 connection.zone work
# nmcli con down my-enp0s8
หลังจากนั้น จะพบว่า zone work , zone public จะ active เนื่องจากถูกน้ำไปเชื่อมกับ interface
# firewall-cmd --list-all-zones
work (active)
target: default
icmp-block-inversion: no
interfaces: enp0s8
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules: