Сетевые маршруты в CentOS

Содержание
Введение
Показать существующие маршруты
Добавить временный маршрут
Добавить постоянный маршрут
Настроить роутер
NAT
Похожие статьи

Введение

В этой статье вы сможете на простом примере изучить работу с сетевыми маршрутами.

Сперва вы научитесь настраивать клиентский хост [andrei@client1 ~]$, ему достаточно иметь один сетевой интерфейс.

У клиента может вообще не быть интерфейса, смотрящего во внешний интернет. Всю работу с внешним миром он будет вести через второй хост - роутер (#1) [andrei@router ~]$.

Клиент и роутер должны быть в одной подсети, чтобы клиент смог найти роутер. Во внешний интернет роутер (#1) выходит через роутер (#2)

В этом примере:

IP клиента во внутренней (Host-only) сети VirtualBox - 192.168.56.186/24
IP роутера (#1) во внутренней (Host-only) сети VirtualBox - 192.168.56.181/24
IP роутера (#1) в домашней (Bridged Adapter) сети - 10.1.54.217/21
IP роутера (#2) в домашней сети 10.1.55.254

Совет

Если вы недостаточно уверенно оперируете терминами сеть, подсеть, маска сети - советую сперва изучить статью «Компьютерные сети»

Если вы работаете с VirtualBox чтобы повторить этот пример клиенту можете оставить только Host-only Adapter а роутеру оставьте два - Host-only и Bridged Adapter

Показать существующие маршруты

Список интерфейсов клиента можно изучить командой

ip a s

enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.56.186 netmask 255.255.255.0 broadcast 192.168.56.255 inet6 fe80::7a4:b74c:942a:bbdf prefixlen 64 scopeid 0x20<link> ether 08:00:27:1c:cd:94 txqueuelen 1000 (Ethernet) RX packets 1004 bytes 129137 (126.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 20276 bytes 1273399 (1.2 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 13030 bytes 1146784 (1.0 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 13030 bytes 1146784 (1.0 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:34:a8:f3 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

Чтобы увидеть маршруты выполните

ip route show

Или просто

ip r

192.168.56.0/24 dev enp0s3 proto kernel scope link src 192.168.56.186 metric 100 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1

Можно использовать команду route

route

Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.56.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s8 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0

Или netstat

netstat -r

Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.56.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s8 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0

netstat -rn

Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.56.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s8 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0

Добавить маршрут временно

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

sudo ip route add default via 192.168.56.181
ip r

default via 192.168.56.181 dev enp0s3 192.168.56.0/24 dev enp0s3 proto kernel scope link src 192.168.56.186 metric 100 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1

Создан маршрут по умолчанию. Он проходит через хост c IP адресом 192.168.56.181.

Чтобы маршрут заработал нужно настроить этот хост как роутер.

Созданный маршрут удалится после перезагрузки компьютера. Чтобы этого не случилось, нужно сохранить настройки.

Добавить маршрут на постоянной основе

Чтобы сохранить маршрут после перезагрузки, его нужно добавить в конфигурационный файл

cat /etc/resolv.conf

# Generated by NetworkManager search hel.fi.ssh.com nameserver 10.10.10.1 nameserver 10.1.0.2

cd /etc/sysconfig/network-scripts
ls | grep ifcfg

ifcfg-enp0s3 ifcfg-enp0s8 ifcfg-lo

Отредактируйте тот интерфейс, через который планируете работать

sudo vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="dhcp" DEFROUTE="yes" GATEWAY="192.168.56.181" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="enp0s3" UUID="2301b149-07d1-4432-b4b0-0abce0791d7c" DEVICE="enp0s3" ONBOOT="yes"

Настройка роутера

У роутера обычно несколько активных сетевых интерфейса. В данном примере enp0s8 слушает в ту же сеть, что и клиент а enp0s3 слушает на другой роутер, который слушает внешний интернет.

На роутере тоже можно изучить существующие маршруты.

ip r s

default via 10.1.55.254 dev enp0s10 proto dhcp metric 101 10.1.48.0/21 dev enp0s10 proto kernel scope link src 10.1.54.217 metric 101 192.168.56.0/24 dev enp0s8 proto kernel scope link src 192.168.56.181 metric 100

Как вы можете увидеть - по умолчанию мой роутер использует 10.1.55.254/21 - это другой роутер, который слушает внешний интернет.

Выполните

cat /proc/sys/net/ipv4/ip_forward

0

Если у вас там 0, значит маршрутизация выключена.

Чтобы включить маршрутизацию добавьте net.ipv4.ip_forward=1 в конец sysctl.conf

sudo vi /etc/sysctl.conf

# sysctl settings are defined through files in # /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/. # # Vendors settings live in /usr/lib/sysctl.d/. # To override a whole file, create a new file with the same in # /etc/sysctl.d/ and put new settings there. To override # only specific settings, add a file with a lexically later # name in /etc/sysctl.d/ and put new settings there. # # For more information, see sysctl.conf(5) and sysctl.d(5). net.ipv4.ip_forward=1

Проверить результат

sudo sysctl -p

net.ipv4.ip_forward = 1

!cat

cat /proc/sys/net/ipv4/ip_forward
1

Роутер работает, но клиенту этого недостаточно, так как отправив запрос через роутер можно не дождаться ответа - хосты куда отправлен запрос могут не иметь представления о внутренней сети и отвечать так, как будто общаются просто с роутером.

С клиента можно получить пинг от роутера (#1)

ping 10.1.54.217

PING 10.1.54.217 (10.1.54.217) 56(84) bytes of data.
64 bytes from 10.1.54.217: icmp_seq=1 ttl=64 time=0.760 ms

Но пинг до роутера (#2) не получится

[andrei@client1 ~]$ ping 10.1.55.254

Чтобы это исправить нужно с помощью iptables настроить NAT MASQUARADE

NAT

Пример настройки

[andrei@router ~]$ systemctl stop firewalld
[andrei@router ~]$ sudo iptables -L

Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination

[andrei@router ~]$ sudo iptables -t nat -L

Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination

К адаптеру, который смотрит во внешний интернет нужно добавить правило. В моём случае это Bridged адаптер enp0s10

sudo iptables -t nat -A POSTROUTING -o enp0s10 -j MASQUERADE
sudo iptables -t nat -L

Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- anywhere anywhere

Теперь пинг до роутера (#2) сработает

[andrei@client1 ~]$ ping 10.1.55.254

PING 10.1.55.254 (10.1.55.254) 56(84) bytes of data.
64 bytes from 10.1.55.254: icmp_seq=1 ttl=63 time=1.77 ms

Точно также можно использовать NatNetwork адаптер.

Допустим, в VirtualBox есть сеть nn2 и хост 192.168.15.4

Добавить роутеру (#1) адаптер NatNetwork и подключим его к nn2.

В данном примере это оказался адаптер enp0s9

ip a

… 4: enp0s9: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:f3:f5:8d brd ff:ff:ff:ff:ff:ff inet 192.168.15.5/24 brd 192.168.15.255 scope global noprefixroute dynamic enp0s9 valid_lft 443sec preferred_lft 443sec inet6 fe80::6bab:290d:30d9:e791/64 scope link noprefixroute valid_lft forever preferred_lft forever …

sudo iptables -t nat -A POSTROUTING -o enp0s9 -j MASQUERADE
sudo iptables -t nat -L

Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- anywhere anywhere MASQUERADE all -- anywhere anywhere

Теперь с клиента можно увидеть этот хост из другой NAT сети

[andrei@client1 ~]$ ping 192.168.15.4

PING 192.168.15.4 (192.168.15.4) 56(84) bytes of data. 64 bytes from 192.168.15.4: icmp_seq=1 ttl=63 time=2.22 ms

Похожие статьи
Настройка сети в CentOS
Создать новый интерфейс
CentOS
Компьютерные сети
ip
hostname
DNS
route: Маршруты/Роутер
Firewall
iptables
netstat
iftop: Мониторинг сети
nethogs: Мониторинг сети
tc: Контроль за трафиком
iperf: Измерение скорости сети
uuidgen: uuid для сетевого интерфейса
SCP: обмен файлами;
SSH: удалённый доступ
Сокеты в C

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@eth1.ru если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: