Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

00-tech-book

.pdf
Скачиваний:
42
Добавлен:
10.02.2016
Размер:
7.86 Mб
Скачать

NETWORKING_IPV6=no

HOSTNAME=centos52

NETWORKING=yes — будет ли наш сервер работать в сети, наверно 99% случаев ответ будет — да, то есть yes :) Эта директива для Ipv4

NETWORKING_IPV6=no — Ipv6 уже где-то используется но не настолько чтобы переводить сервера на его использование. Пока я не буду его включать.

HOSTNAME=centos52 — имя нашего сервера

В /etc/sysconfig/network-scripts/ находятся различные скрипты влияющие на работу сетевого интерфейса Linux

# ls -l /etc/sysconfig/network-scripts/

-rw-r--r-- 1 root root 140 Feb 14 19:23 ifcfg-eth0

-rw-r--r-- 1 root root 254 Mar 3 2008 ifcfg-lo

...

/etc/sysconfig/network-scripts/ifcfg-*

Для нас самое большое значение имеют скрипты ifcfg-*. Именно в них описываются настройки сетевых интерфейсов присутствующих в сервере. Давайте посмотрим что у них внутри.

DHCP iface

Данный интерфейс работает с использованием службы DHCP.

# cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=dhcp

HWADDR=00:0C:29:43:5B:3D

ONBOOT=yes

Мой компьютер работает по DHCP, что отчетливо видно по директиве BOOTPROTO=dhcp. То есть сетевые настройки мы получаем у dhcp-сервера при загрузке нашего сервера. Другие директивы означают следующее:

DEVICE=eth0 — как будет называться наш интерфейс, принято первый интерфейс называть как eth0, второй eth1 и так далее

HWADDR=00:0C:29:43:5B:3D — MAC-адрес нашей сетевой карты. Media Access Control — это уникальный идентификатор сетевой карты. У каждой сетевой карты свой MAC-адрес и в идеале он не повторяется больше ни с каким в мире. Иногда MAC-адрес пытаются подменить чтобы выдать свой

компьютер за чужой, по каким либо соображениям, обычно враждебным. Длина MAC-адреса составляет 48 бит что позволяет иметь 281 474 976 710 656 уникальных комбинаций. У каждого производителя сетевых плат есть

Модуль 2. Сетевой интерфейс Linux.

 

31

 

 

 

 

 

свой диапазон в котором он назначает MAC-адреса своим платам. MACадрес пишется в шестнадцатеричной форме счисления.

ONBOOT=yes — включать ли этот интерфейс автоматически при включение сервера. Думаю, что скорее всего это и нужно.

Loopback iface

loopback-интерфейс необходим для нормальной работы ОС.

# cat /etc/sysconfig/network-scripts/ifcfg-lo

DEVICE=lo

IPADDR=127.0.0.1

NETMASK=255.0.0.0

NETWORK=127.0.0.0

BROADCAST=127.255.255.255

ONBOOT=yes

NAME=loopback

DEVICE=lo — это loopback интерфейс. Интерфейс есть в любой системе и всегда поднят. Он нужен для нормальной работы ОС.

IPADDR=127.0.0.1 — ip-адрес loopback интерфейса. Он всегда такой.

NETMASK=255.0.0.0 — сетевая маска

NETWORK=127.0.0.0 — сеть в которой находится наш ip-адрес

BROADCAST=127.255.255.255 — адрес широковещательной рассылки

ONBOOT=yes — включать ли интерфейс при загрузке сервера, конечно да!

NAME=loopback — имя сетевого интерфейса. Вывод команды ifconfig будет показывать значение указанное именно в DEVICE.

Custom iface

Выше мы рассмотрели интерфейс работающий по протолу dhcp. Но как правило придется работать именно с custom-интерфейсами, то есть вручную задавать параметры и маршрутизацию о которой мы поговорим немного позже.

Вот custom-интерфейс

DEVICE=eth0

IPADDR=192.168.0.2

NETMASK=255.255.255.0

NETWORK=192.168.0.0

BROADCAST=255.255.255.255

GATEWAY=192.168.0.1

32

 

Модуль 2. Сетевой интерфейс Linux.

 

 

 

ONBOOT=yes

BOOTPROTO=dhcp здесь отсутствует но есть другие директивы. IPADDR=192.168.0.2 — здесь мы задаем ip-адрес нашего интерфейса NETMASK=255.255.255.0 — сетевая маска

NETWORK=192.168.0.0 — сеть в которой находится наш ip-адрес BROADCAST=255.255.255.255 — адрес широковещательной рассылки GATEWAY=192.168.0.1 — шлюз через который мы попадаем в другие сети ONBOOT=yes — включать ли интерфейс при загрузке сервера

Практика

Настроим сетевой интерфейс в Linux. Мы знаем что lo всегда включен и его не нужно вообще трогать.

Редактируем /etc/sysconfig/network-scripts/ifcfg-eth0 Мой конфигурационный файл выглядит так: DEVICE=eth0

HWADDR=00:0C:29:43:5B:3D

IPADDR=192.168.146.130

NETMASK=255.255.255.0

BROADCAST=192.168.146.255

GATEWAY=192.168.146.2

ONBOOT=yes

Далее нужно перезагрузить сетевой интерфейс чтобы прочитались новые настройки

 

# service network restart

 

 

 

 

или

 

 

 

 

 

 

 

# /etc/init.d/network restart

 

 

Shutting down interface eth0:

[ OK ]

 

Shutting down loopback interface:

[ OK ]

 

Bringing up loopback interface:

[ OK ]

 

Bringing up interface eth0:

[ OK ]

Проверим все ли поднялось

# ifconfig

eth0 Link encap:Ethernet HWaddr 00:0C:29:43:5B:3D

Модуль 2. Сетевой интерфейс Linux.

 

33

 

 

 

inet addr:192.168.146.130 Bcast:192.168.146.255 Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fe43:5b3d/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:1327 errors:0 dropped:0 overruns:0 frame:0

TX packets:1340 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:149547 (146.0 KiB) TX bytes:232486 (227.0 KiB)

Interrupt:59 Base address:0x2000

...

Жирным выделены особенно интересные нам участки в выводе команды ifconfig. Как видим все похоже на правду и интерфейс «поднят», то есть находится в рабочем режиме.

Для большей ясности разберем и некоторые другие параметры сетевого интерфейса

MTU:1500 — это Maximum Transfer Unit. Различные сети и каналы передачи имеют разные скоростиобмена.Этоопределяетмаксимальнуюдлинупакета, пересылка которого с высокой вероятностью произойдет без ошибок. Для Ethernet — сетей значение MTU составляет 1500 байт.

Metric:1 — чем меньше это значение тем лучше считается маршрут до этой сети. На серверах скорее всего это менять не придется. Этот параметр играет большую роль в работе протоколов маршрутизации.

Сollisions:0 — нулевое значение говорит о том, что с сетевым интерфейсом все в порядке на физическом уровне.

RX bytes — сколько данных принято

TX bytes — сколько данных отослано

Так идем дальше. В примере выше, после настройки сетевого интерфейса мы полностью перезагружали службу network. Когда на сервере только один интерфейс это не страшно, но если их несколько и какие-то уже работают и выполняют свои функции прерывать их работу нежелательно. Тут нам на помощь приходит скрипт ifup/ifdown. Он нужен для перезагрузки какого либо одного сетевого интерфейса. Короткий пример.

Шаг 1. Вносим изменения в /etc/sysconfig/network-scripts/ifcfg-eth0

Шаг 2. # ifdown eth0

Шаг 3. # ifup eth0

34

 

Модуль 2. Сетевой интерфейс Linux.

 

 

 

Маршрутизация

Маршрутизация — это процесс поиска наилучшего пути от источника к получателю. Это набор правил по которым будет передаваться трафик.

Мы вроде бы с ней еще нечего не делали, но она уже у вас работает. Не верите ? Сейчас проверим.

netstat – команда позволяющая отслеживать сетевые подключения сервера

# netstat -r

Kernel IP routing table

 

Destination

Gateway

Genmask

Flags

 

MSS Window

irtt Iface

 

 

 

 

 

 

 

 

 

 

 

 

192.168.146.0

*

255.255.255.0

U

0

0

0

eth0

 

 

 

 

 

 

 

 

 

 

default

192.168.146.2

0.0.0.0

UG

0

0

0

eth0

В выводе мы увидим список сетей и как до них добраться. То есть какой шлюз использовать для достижения пункта назначения. Помните, когда мы настраивали сетевой интерфейс eth0 мы указали директиву GATEWAY в ifcfgeth0 ? Этот gateway был помечен как default, то есть шлюз по умолчанию. Весь трафик в сети, которые явно не описаны в таблице маршрутизации, отправляются через шлюз по умолчанию. В нашем случае default gateway — 192.168.146.2

Вывод команды “netstat -r” нам говорит следующее

Первая строка. Чтобы попасть в подсеть 192.168.146.0 нам не нужен никакой шлюз (*), поскольку мы и так находимся в этой сети

Вторая строка — это default, то есть маршрут по умолчанию. Весь трафик предназначенный по все остальные сети будет уходить через этот шлюз.

Genmask — это сетевая маска, благодаря маске можно отделить сетевую часть адреса от адреса хоста

Flags: U — это UP, то есть маршрут поднят и функционирует сейчас

Flags: UG — UP, Gateway. Маршрут поднят и использует gateway в своей работе

MSS – Maximum Segment Size, определяет максимальный размер пакета для этого маршрута.

Window – размер окна. Максимальный размер пакета, который система готова принять.

irtt-initialroundtriptime,задаетзначениекотороеиспользуетсяприустановке

Модуль 2. Сетевой интерфейс Linux.

 

35

 

 

 

соединения. Round trip time – представляет из себя отрезок времени, если в течение которого от удаленного хоста не пришло подтверждение о получение пакета, пакет будет выслан снова.

Iface – показывает к какому интерфейсу относится маршрут

Прописываем маршруты

Еслинасерверенесколькосетевыхинтерфейсовтоскореевсегопонадобится вручную составить таблицу маршрутизации.

Приведу пример. У нас два сетевых интерфейса eth0 и eth1. Через eth0 мы получаем доступ во внешние сети и по умолчанию весь трафик направляется через него. Через eth1 мы получаем доступ ко внутренней сети 192.168.147.0/24 но что еще важнее, в этой сети есть сервер 192.168.147.1 у которого есть сетевой интерфейс в подсеть 192.168.148.0/24 и мы очень хотим туда попадать. А для того что туда попадать необходимо прописать правильные маршруты у себя в ОС.

Так выглядит таблица маршрутизации в нашем случае

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

# netstat -r

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Kernel IP routing table

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Destination

Gateway

Genmask

Flags

MSS Window irtt Iface

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

192.168.147.0

*

 

255.255.255.0

U

0

0

0

eth1

 

 

 

 

 

 

 

 

 

 

 

 

 

192.168.146.0 *

 

255.255.255.0

U

0

0

0

eth0

 

 

 

 

 

 

 

 

 

 

 

192.168.148.0

192.168.147.1

255.255.255.0 UG

0

0

0

eth1

 

 

 

 

 

 

 

 

 

 

 

 

default

192.168.146.2

0.0.0.0

UG

0

0

0

eth0

То есть в подсеть 192.168.148.0/24 (внутренняя подсеть) мы попадаем через eth1 -> 192.168.147.1, сервер выполняющий роль шлюза в эту подсеть. Все остальное идет через default шлюз. Все очень просто. Ну и собственно как привести настройки к этому.

36

 

Модуль 2. Сетевой интерфейс Linux.

 

 

 

Шлюз по умолчанию

# cat /etc/sysconfig/network

...

GATEWAY=192.168.146.2

...

eth0

# cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

HWADDR=00:0C:29:43:5B:3D

IPADDR=192.168.146.130

NETMASK=255.255.255.0

BROADCAST=192.168.146.255

ONBOOT=yes

eth1

# cat /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

ONBOOT=yes

HWADDR=00:0c:29:43:5b:47

IPADDR=192.168.147.2

NETMASK=255.255.255.0

И самое главное, файл в котором мы прописываем статический маршрут для eth1.

# cat /etc/sysconfig/network-scripts/route-eth1

192.168.148.0/24 via 192.168.147.1

Для того чтобы прописать маршруты для какого либо интерфейса, необходимо создать файл route-<название интерфейса> в каталоге / etc/sysconfig/network-scripts/ После того как все готово к работе, мы перезагружаем сетевой сервис.

# service network restart

Модуль 2. Сетевой интерфейс Linux.

 

37

 

 

 

Теперь подведем итоги, что и как мы сделали.

Естьтривидамаршрутов.Динамические–которыединамическиназначаются сетевому интерфейсу, например сервером DHCP. Статические – которые вы вручную прописываете и они остаются в настройках после перезагрузки сервера. И маршруты по умолчанию – когда никакие другие маршруты не подходят для того, чтобы отослать по ним пакеты.

Мы могли добавить маршрут в подсеть 192.168.148.0/24 командой route

# route add -net 192.168.148.0/24 gw 192.168.147.1

Но после перезагрузки сервера информация о маршруте пропала бы. Чтобы такого не произошло используется специальный механизм. А именно создание файла вида route-<имя интерфейса> в /etc/sysconfig/networkscripts В него мы вносим список сетей и как до них добраться. Каждая новая запись начинается с новой строки.

Про шлюз

Чтобы сервер был шлюзом для других компьютеров необходимо удовлетворить ряд условий:

1.На сервере корректная таблица маршрутизации благодаря которой он

 

 

 

 

поймет что делать с пакетами дальше;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.Включена

передача

 

пакетов

 

между

интерфейсами:

 

 

 

 

 

 

 

 

 

 

 

 

# echo '1' > /proc/sys/net/ipv4/ip_forward

 

 

 

 

 

 

 

 

 

 

 

 

 

3.Включен

маскарадинг

 

(или

установлен

прокси)

для

 

 

 

 

 

 

 

 

 

 

 

 

нужной

нам

сети,

например

вот

так

(перенаправлять

 

 

 

 

 

 

 

 

 

 

 

 

пакеты

для

хостов

из

подсети

192.168.146.0/24):

# iptables -t nat -A POSTROUTING -s 192.168.146.0/24 -j MASQUERADE

Полезные ключи netstat

r – показывает таблицу маршрутизации

n – выводит статистику по ip-адресу, не пытается определить имя хоста. Это работает несколько быстрее и обычно, вывод команды удобнее читать

a – показывает состояние всех сокетов на сервере. Сокет – это конечная точка сетевых коммуникаций. Каждый сокет имеет тип и ассоциированный с ним процесс.

t – протокол tcp

u – протокол udp

i – отображает таблицу сетевых интерфейсов

l – отображает сокеты в режиме LISTEN, то есть ожидающие соединения

p – показать PID (process ID) и имя программы с которой взаимодействует

сокет

38

 

Модуль 2. Сетевой интерфейс Linux.

 

 

 

netstat на практике

Параметров выше вполне достаточно, чтобы многое узнать из жизни сетевых

служб.

Слушает ли кто нибудь 25-й порт ?

# netstat -nlp | grep :25

tcp

0 0 127.0.0.1:25

0.0.0.0:*

LISTEN 2710/sendmail:

 

 

 

 

 

 

 

Видим что 25-й порт слушает процесс sendmail с PID 2710

 

 

 

 

 

 

 

 

# ps ux | grep 2710

 

 

 

 

 

 

 

 

 

root

2710 0.0 0.7 8992

1836 ?

Ss 11:17 0:00 sendmail: accepting

connections

Посмотрим текущие ESTABLISHED-соединения по tcp, то есть с кем у нас есть подключение и по какому порту

# netstat -nt

Active Internet connections (w/o servers)

 

Proto Recv-Q Send-Q Local Address

Foreign Address

State

 

 

 

 

 

 

 

 

 

 

 

tcp

0

0 ::ffff:192.168.146.130:22

::ffff:192.168.146.1:2642

ESTABLISHED

 

 

 

 

 

 

 

tcp

0

132 ::ffff:192.168.146.130:22

::ffff:192.168.146.1:2027

ESTABLISHED

Как видим это только соединения по ssh

Также, будет полезно знать какие состояния бывают у сокетов:

ESTABLISHED – сокет с установленным соединением;

SYN_SENT – сокет в процессе установки соединения;

SYN_RECV – был принят запрос установки соединения из сети; FIN_WAIT1 – сокет закрыт и соединение закрывается;

FIN_WAIT2 – сокет закрыт и сокет ждет закрытия соединения с удаленного хоста;

TIME_WAIT – сокет после своего закрытия, еще какое-то время принимает пакеты из сети;

CLOSED – сокет не используется;

CLOSE_WAIT – удаленный хост отключился, ожидаем закрытия сокета;

LAST_ACK – удаленный хост отключился и сокет закрыт. Ожидание потдверждения;

LISTEN – сокет ожидает входящие подключения;

CLOSING – оба сокета отключились но еще не все наши данные отосланы; UNKNOWN – статус сокета неизвестен.

Модуль 2. Сетевой интерфейс Linux.

 

39

 

 

 

Мы научились настраивать один и более сетевых интерфейсов. Разобрались с маршрутизацией. Узнали какие файлы и как влияют на работу сети в Linux. Сейчас мы познакомимся с двумя программами которые играют существенную роль в работе сети. Это программа nmap – которая сканирует порты удаленного хоста и сообщается какие порты на нем открыты. И программаtcpdump,онапереводитвашусетевуюплатуврежимpromiscuous, что позволяет перехватывать весь трафик проходящий через карту.

NMAP

Nmap позволяет сканировать удаленные компьютеры на предмет открытых портов. С более агрессивными опциями можно узнать версию ОС и некоторые другие вещи.

Устанавливаем программу

# yum -y install nmap

Просканируем удаленный хост. Как видим есть кое что интересное.

# nmap -A -T5 192.168.146.132

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2009-02-18 19:36 MSK

Interesting ports on unixbox (192.168.146.132):

Not shown: 1677 closed ports

PORT STATE SERVICE VERSION

22/tcp open ssh OpenSSH 4.3 (protocol 2.0)

111/tcp open rpcbind 2 (rpc #100000)

935/tcp open status 1 (rpc #100024)

MAC Address: 00:0C:29:25:04:55 (VMware)

Device type: general purpose

Running: Linux 2.4.X|2.5.X|2.6.X

OS details: Linux 2.4.7 - 2.6.11

Uptime 0.195 days (since Wed Feb 18 14:55:10 2009)

Nmap finished: 1 IP address (1 host up) scanned in 14.239 seconds

У nmap много различных опций, подробнее о них можно прочитать в man nmap

40

 

Модуль 2. Сетевой интерфейс Linux.