Мрежово администриране - въведение
Съдържание:
В последните версии на Ubuntu (от версия 17.10 ) стандартните средства за конфигуриране на мрежата - net-tools са заменени с ново средство за генериране на мрежови конфигурации NetPlan/CloudInit tool. Средствата net-tools не се инсталират по подразбиране.
За да може виртуалната машина да се появи в локалната мрежа е необходимо при изключена (и избрана) машина -> Settings ->Network -> Adapter 1 -> Attached to Bridged adapter
При инсталирането е зададено име, което може да се види в стандартния prompt на командния интерпретатор (известен като PS1 prompt). Там се извежда информация до първата точка в името - ако машината е imom.mycompany.com, то в PS1 prompt ще бъде изведено imom.
Името може да се види и с команда hostname:
$imom@imom-VirtualBox:~$ hostname
imom-VirtualBox
imom@imom-VirtualBox:~$
Името може да се смени с команда hostnamectl (необходими са административни права):
$sudo hostnamectl set-hostname imom-VB
$ cat /etc/hostname
imom-VB
$sudо nano /etc/hostname
$cat /etc/hosts
127.0.0.1 localhost
127.0.1.1
imom-VirtualBox
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.016 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.046 ms
...
$ ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.029 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.049 ms
...
$ping 127.0.1.1
PING 127.0.1.1 (127.0.1.1) 56(84) bytes of data.
64 bytes from 127.0.1.1: icmp_seq=1 ttl=64 time=0.030 ms
...
$ ping imom-VirtualBox
PING imom-VirtualBox (127.0.1.1)
56(84) bytes of data.
64 bytes from imom-VirtualBox
(127.0.1.1): icmp_seq=1 ttl=64 time=0.031 ms
...
За съжаление командата hostnamectl не сменя съдържанието на тоаи файл и той трябва да се промени ръчно след смяна на името:
$sudо nano /etc/hosts
2. Управление на мрежовите интерфейси
За установяване на текущите параметри на мрежовия интерфейс се използва командата ip a или ip addr ( до версия 16.04 на Ubuntu се използваше команда ifconfig)
$ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state
UNKNOWN group default qlen 1000
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
fq_codel state UP group default qlen 1000
link/ether 08:00:27:54:b7:57 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.243/24 brd 192.168.1.255 scope global
dynamic noprefixroute enp0s3
valid_lft 62567sec preferred_lft
62567sec
inet6 fe80::a00:27ff:fe54:b757/64 scope link
valid_lft forever preferred_lft
forev
Резултатът представлява наличните мрежови интерфейси и техният текущ статус. Извеждат се неща като ip адреса на всеки мрежов интерфейс (ако има такъв ), както и неговия MAC адрес.
Ethernet интерфейсите се идентифицираха в по-старите системи обикновено с имена ethX, където X е нарастваща стойност. Първият интерфейс типично бе eth0, вторият - eth1. В машини с много интерфейсни адаптери се взимаха специални мерки да не си разменят имената при рестартиране на системата, като се привързваха към MAC адресите. За целта се използваше файл /etc/udev/rules.d/70-persistent-net-rules. Типичен ред от този файл има вида:Друг начин за идентифициране на мрежовите интерфейси е командата lshw. Това е малка програма, която извлича детайлна информация за хардуерната конфигурация на машината:
$sudo lshw -class network
*-network
description: Ethernet interface
product: 82540EM Gigabit Ethernet
Controller
vendor: Intel Corporation
physical id: 3
bus info: pci@0000:00:03.0
logical name: enp0s3
version: 02
serial: 08:00:27:54:b7:57
size: 1Gbit/s
capacity: 1Gbit/s
width: 32 bits
clock: 66MHz
capabilities: pm pcix bus_master
cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd
autonegotiation
configuration: autonegotiation=on
broadcast=yes driver=e1000 driverversion=7.3.21-k8-NAPI duplex=full
ip=192.168.1.243 latency=64 link=yes mingnt=255 multicast=yes
port=twisted pair speed=1Gbit/s
resources: irq:19
memory:f0200000-f021ffff ioport:d020(size=8)
С ip командата може да се управлява състоянието на интерфейса:
Спиране на инрефейса (откачване на връзката) и включване отново :$sudo ip link set enp0s3 down
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state
UNKNOWN group default qlen 1000
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> mtu 1500 qdisc fq_codel state DOWN group default qlen
1000
link/ether 08:00:27:54:b7:57 brd ff:ff:ff:ff:ff:ff
sudo lshw -class network
*-network
DISABLED
description: Ethernet interface
product: 82540EM Gigabit Ethernet
Controller
vendor: Intel Corporation
physical id: 3
bus info: pci@0000:00:03.0
logical name: enp0s3
version: 02
serial: 08:00:27:7a:cf:e1
size: 1Gbit/s
capacity: 1Gbit/s
width: 32 bits
clock: 66MHz
capabilities: pm pcix bus_master
cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd
autonegotiation
configuration: autonegotiation=on
broadcast=yes driver=e1000 driverversion=5.13.0-39-generic duplex=full
latency=64 link=no mingnt=255 multicast=yes port=twisted pair
speed=1Gbit/s
resources: irq:19
memory:f0200000-f021ffff ioport:d020(size=8)
sudo ip link set enp0s3 up
imom@imom-VB:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state
UNKNOWN group default qlen 1000
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
fq_codel state UP group
default qlen 1000
link/ether 08:00:27:54:b7:57 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.243/24 brd 192.168.1.255 scope global
dynamic noprefixroute enp0s3
valid_lft 86393sec preferred_lft
86393sec
$ sudo lshw -class network
*-network
description: Ethernet interface
product: 82540EM Gigabit Ethernet
Controller
vendor: Intel Corporation
physical id: 3
bus info: pci@0000:00:03.0
logical name: enp0s3
version: 02
serial: 08:00:27:7a:cf:e1
size: 1Gbit/s
capacity: 1Gbit/s
width: 32 bits
clock: 66MHz
capabilities: pm pcix bus_master
cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd
autonegotiation
configuration: autonegotiation=on
broadcast=yes driver=e1000 driverversion=5.13.0-39-generic duplex=full
ip=192.168.1.8 latency=64 link=yes mingnt=255 multicast=yes
port=twisted pair speed=1Gbit/s
resources: irq:19
memory:f0200000-f021ffff ioport:d020(size=8)
3. Конфигуриране на статично IP адресиране
Задаване статичен IP address на Ubuntu 20.04 LTS desktop
Network configuration in Ubuntu desktop is controlled by network manager. Промяната може да се извърши през графичния интерфейс:
Login to desktop environment -> network icon -> Settings -> Wired settings - > Ipv4 -> Manual -> Adress : 192.168.1.20 Netmask: 255.255.255.0 Gateway: 192.168.1.1
DNS -> automatic
Задаване статичен IP address на Ubuntu 20.04 LTS Server
От Ubuntu 17.10 (2017 година) NetworkManager, който се използваше за конфигуриране на мрежовите интерфейси е заменен с Netplan. Конфигурационните файлове сега се съхраняват в директория /etc/netplan в YAML формат. Този формат не се разглежда в този курс, но синтаксисът му е лесен за разбиране и не е необходимо доброто му познаване за да бъдат конфигурирани мрежовите интерфейси.
$ cat /etc/netplan/01-network-manager-all.yaml
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
ethernets:
enp0s3:
dhcp4: yes
addresses: []
От съдържанието му се разбира, че има една мрежова карта - enp0s3, която взима адреса от dhcp сървър. Това е конфигурацията, която трябва да се направи, ако желаете вашият интерфейс да взима адрес от локалния dhcp сървър.
Преди да се извършват промени във файла е добре да бъде запазено негово копие в случай на проблем:
$sudo cp /etc/netplan/01-network-manager-all.yaml
/etc/netplan/01-network-manager-all.yaml.bak1
imom@imom-VB:~$ ls /etc/netplan/
01-network-manager-all.yaml
01-network-manager-all.yaml.bak1
За да бъде конфигуриран статичен адрес на сървъра трябва двете линии задаващи автоматично получаване на адрес
dhcp4: yes
addresses: []
да бъдат заменени с
dhcp4: no
след което трябва да се зададе
1)мрежовият адрес на интерфейса:
addresses: [192.168.1.160/24]
При задаването му той трябва да остане в локалната мрежа - в случая това е мрежа клас "С" задавана с 24 бита (192.168.1) и да е извън обхвата на адресите задавани от локалния dhcp сървър;gateway4: 192.168.1.1
3)Адресът на сървъра на имената - може да бъде локален сървър (най-често със същия адрес като gateway на локалната мрежа) или в примера съм използвал два глобални сървъра на имена предоставени от Google:nameservers:
addresses: [8.8.8.8, 8.8.4.4]
Промените трябва да бъдат извършени като администратор:
$sudo nano /etc/netplan/01-network-manager-all.yaml
cat /etc/netplan/01-network-manager-all.yaml
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
ethernets:
enp0s3:
dhcp4: no
addresses: [192.168.1.160/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
$ sudo netplan try
$ sudo netplan apply
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state
UNKNOWN group default qlen 1000
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
fq_codel state UP group default qlen 1000
link/ether 08:00:27:54:b7:57 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.160/24 brd 192.168.1.255 scope global
noprefixroute enp0s3
valid_lft forever preferred_lft
forever
inet6 fe80::a00:27ff:fe54:b757/64 scope link
valid_lft forever preferred_lft
forever
Редът по който се търси връзката между IP адрес и име се задава от файла /etc/nsswitch.conf :
$cat /etc/nsswitch.conf |egrep hosts
hosts: files
mdns4_minimal [NOTFOUND=return] dns
(Другите редове в този файл няма да бъдат обсъждани тук).
Същественото тук е реда на модулите files и dns ( mdns4_minimal се използва за мултикаст търсене на имена в локалната мрежа с топ домейн .local и също няма да бъде обсъждан тук) .
Сложеният на първо място files показва, че първо името ще се проверява в файла с имената ( /etc/hosts ). След това ще бъде търсен в dns. Това е подразбиращият се ред на тъсене.
Използването на този подход позволява временното присвояване на адреси, много е удобен за тестване но е труден за поддържане и се отнася само за локалната машина.
В предишни версии на Ubuntu, IP адресите на dns сървърите се сухраняваха във файла /etc/resolv.conf. Редактирането на този файл водеше до промяната им. В последните версии файлът е съхранен, но не се използва за тази цел, а се генерира автоматично. Name resolution в последните версии се осъществява от демон процеса systemd-resolved, който се стартира от initd , и използва dns settings зададени от netplan. При статично конфигуриран IP адрес на машината те могат да се видят в netplan конфигурацията, а при DHCP:
$systemd-resolve --status |grep DNS\ Servers
DNS Servers:
192.168.1.1
Инсталиране
Състои се от две компоненти - server daemon, който работи във фонов режим на управлявания съсрвър и клиент на локалната машина, който позволява свърване със сървъра и изпълнеие на командите. Клиенти има за всички операционни системи. Повечето съвременни дистрибуции на Linux инсталират по подразбиране клиента. Дали е инсталиран може да се провери с командата which (which - locate a command) :
$ which ssh
/usr/bin/ssh
Когато е инсталиран се извежда пътя до командата и може да бъде използван:
$ ssh ff.tu-sofia.bg
The authenticity of host 'ff.tu-sofia.bg (81.161.252.17)' can't be
established.
ECDSA key fingerprint is
SHA256:ztoci+dnI+JQngUDp7CogkmlvqPiA+ephVOi2WU5TQk.
Are you sure you want to continue connecting
(yes/no/[fingerprint])? yes
Warning: Permanently added 'ff.tu-sofia.bg,81.161.252.17' (ECDSA) to
the list of known hosts.
imom@ff.tu-sofia.bg's password:
$ sudo apt install openssh-client
Дали на сървъра е инсталиран server daemon може да се провери с командата
$ which sshd
/usr/bin/sshd
Ако не е инсталиран се инсталира с командата:
$ sudo apt install openssh-server
[sudo] password for imom:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
ncurses-term openssh-sftp-server ssh-import-id
Suggested packages:
molly-guard monkeysphere ssh-askpass
The following NEW packages will be installed:
ncurses-term openssh-server openssh-sftp-server ssh-import-id
0 upgraded, 4 newly installed, 0 to remove and 47 not upgraded.
Need to get 688 kB of archives.
After this operation, 6010 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
...
Инсталирането на мощен продукт освен удобствата носи и опасности - създава възможности за външна атака върху сървъра. Принципът е, че трябва да се инсталират само продукти, които са необходими. за реален сървър аз не виждам как може да не се инсталира openssh-server, но трябва да се вземат мерки за негова защита - например да се използва подходящо firewall.
Команди
По подразбиране пакетът openssh-server е конфигуриран така, че след инсталиране веднага е готов за използване. Дали необходимият service работи може да се провери с командата:
$ systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded
(/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2021-05-28
16:40:34 EEST; 14min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 3809 (sshd)
Tasks: 1 (limit: 2315)
Memory: 1.1M
CGroup: /system.slice/ssh.service
└─3809 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startup
...
$ sudo systemctl start ssh
Ако изходът от systemctl status изведе, че сървърът е disabled ( означава, че не се стартира автоматично при стартиране на ситемата):
$ sudo systemctl enable ssh
Когато съсрвърът е активен, той трябва да слуша портовете за конекции. Това може да се провери с команда ss (ss - utility to investigate sockets):$ sudo ss -tunlp|grep ssh
tcp LISTEN
0
128
0.0.0.0:22
0.0.0.0:*
users:(("sshd",pid=3809,fd=3))
tcp LISTEN
0
128
[::]:22
[::]:* users:(("sshd",pid=3809,fd=4))
Свързването със сървъра става по име или IP адрес:
$ ssh ff.tu-sofia.bg
$ ssh 81.161.252.17
По подразбиране логването е със същото име каквото сте на локалната система. Ако искате да се логнете под друго име то се задава първо последвано от @:
$ ssh imom@ff.tu-sofia.bg
$ ssh imom@81.161.252.17
По подразбиране sshd слуша на порт 22. Акотой слуша на друг порт (например 2391):
$ ssh -p 2391 imom@ff.tu-sofia.bg
$ ssh -p 2391 imom@81.161.252.17