Мрежово администриране - въведение
Съдържание:
В последните версии на 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
$ hostnamectl $ hostnamectl
Static hostname: homeVB
Icon name: computer-vm
Chassis: vm
Machine ID:
c03769c35ee84338af4d009535004927
Boot ID:
d01361f23b4c4e54ad17acb4ac13c320
Virtualization: oracle
Operating System: Ubuntu 22.04.4
LTS
Kernel: Linux
6.5.0-25-generic
Architecture: x86-64
Hardware Vendor: innotek GmbH
Hardware Model: VirtualBox
Забележка : Icon name се използва от някои графични апликации.
Името може да се смени с команда hostnamectl (необходими са административни права):
$sudo hostnamectl set-hostname imom-VB
$ cat /etc/hostname
imom-VB
$sudo hostnamectl set-icon-name homeVB
$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
Всеки ред на файла започва с ip адрес, след което се задава име. Могат да бъдат задавани алтернативни имена разделени с празен интервал.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 адрес.
При изписване на ip адреса се използва CIDR (Classless Inter-Domain Routing) метод на представяне на мрежовата и хост частта от IP адреса. Приема се нотация за изписване на мрежов адрес – CIDR блок. При този запис след мрежовия адрес се поставя наклонена черта и се изписват броя на битовете в мрежовия адрес. Така например в 192.168.1.243/24 означава че от 32 -та бита в адреса 24 са за мрежовия адрес - 192.168.1 и последните 8 - 243 са за адреса на хоста в локалната мрежа. За да се използва метода е необходимо всички маршрутизиращи протоколи да пренасят информация освен за мрежовите адреси, така и за дължината на мрежовата част. При това става възможно да се адресират всички възможни IP адресни комбинации, не се използва разделянето на адресите на класове и мрежова маска. В IPv6 мрежова маска не се дефинира като понятие, използва се единствено CIDR запис.
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 24.04 LTS desktop
Network configuration in Ubuntu desktop is controlled by network manager. Промяната може най-лесно да се извърши през графичния интерфейс:
Activities -> Network -> Wred settings -> IPv4 -> Address/Netmask/Gattway /DNS -> Apply
След което трябва да се рестартира системата.
Разбира се може винаги да се използва командния интерпретатор за целта. Този подход, описан по-долу е задължителен за Ubuntu сървъри, които не притежават графичен интерфейс.
Задаване статичен IP address на Ubuntu 24.04 LTS Server
От Ubuntu 17.10 (2017 година) NetworkManager, който се използваше за конфигуриране на мрежовите интерфейси е заменен с Netplan. Конфигурационните файлове сега се съхраняват в директория /etc/netplan в YAML формат. Този формат не се разглежда в този курс, но синтаксисът му е лесен за разбиране и не е необходимо доброто му познаване за да бъдат конфигурирани мрежовите интерфейси.
$ cat /etc/netplan/01-network-manager-all.yaml
Редът по който се търси връзката между 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.
Open SSH е вероятно най-използваното средство за отдалечено управление на Linux сървъри. Той позволява криптирана връзка в терминален прозорец и дава пълни възможности за отдалечено конфигуриране и управление.Инсталиране
Състои се от две компоненти - 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-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