Понимаю, что задача очень простая. Скорее всего элементарная. Но я подобным ещё не занимался, поэтому не хватает каких-то базовых знаний.
Есть три узла. Анализатор сигнала, as, и два АРМа, a1 и a2 (такие имена прописал в /etc/hosts).
as выдаёт широковещательные UDP пакеты с оцифровкой сигнала и его предварительным анализом, и им можно управлять по TCP.
На АРМах по несколько интерфейсов eth. Система RHEL.
От as подключён к a1.eth1. А к a1.eth2 подключён a2. К АРМам могут подключаться ещё компьютеры, но речь не о них.
Чтобы a2 мог принимать информацию от as, я просто в программе приёма их отправляю к другому узлу. А вот с TCP возникла проблема. a2 его прямо не видит.
На a1 прописал route add as eth1 и route add a2 eth2.
На a2 -- route add a1 eth1 и route add as gw a1 eth1.
Но на a2 ping as не проходит,
Думал настроить через iptables и FORWARD -- не получилось. На a2 ping as не идёт.
На a1 вызвал firewall-connection. В ней на закладке Masquerade в пункте trusted поставил галочку против Masquerading_zone. Пинг появился. Перегрузил a1 -- пинга нет. Вызвал firewall-connection -- галочка стоит. Снял её -- пинг появился.
Подозреваю, что проблема решается очень просто. Но как?
Помогите настроить маршрутизацию (Маршрут)
Модераторы: SLEDopit, Модераторы разделов
-
- Сообщения: 1254
- ОС: Linux Debian
Re: Помогите настроить маршрутизацию
Решение действительно оказалось очень простым.
Аналогом команды sed -i "s/^net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/" /etc/sysctl.conf
Правда, на "сервере", на котором когда-то настраивали маршрутизацию подобное делалось командой echo 0 >/proc/sys/net/ipv4/ip_forward;
Но в данном случае это не помогало.
Аналогом команды sed -i "s/^net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/" /etc/sysctl.conf
Правда, на "сервере", на котором когда-то настраивали маршрутизацию подобное делалось командой echo 0 >/proc/sys/net/ipv4/ip_forward;
Но в данном случае это не помогало.
-
- Модератор
- Сообщения: 21246
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Помогите настроить маршрутизацию
Первое меняет конфигурационный файл, но не текущую конфигурацию, поэтому изменения подхватятся только после перезагрузки или выполнения sysctl -p. Второе — текущую конфигурацию, но не файл, поэтому изменения будут действовать только до перезагрузки.MiK13 писал: ↑26.02.2020 18:11Решение действительно оказалось очень простым.
Аналогом команды sed -i "s/^net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/" /etc/sysctl.conf
Правда, на "сервере", на котором когда-то настраивали маршрутизацию подобное делалось командой echo 0 >/proc/sys/net/ipv4/ip_forward;
Но в данном случае это не помогало.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
- Сообщения: 1254
- ОС: Linux Debian
Re: Помогите настроить маршрутизацию
Это мне понятно. Нужно было решить проблему в принципе.Bizdelnick писал: ↑26.02.2020 18:34Первое меняет конфигурационный файл, но не текущую конфигурацию, поэтому изменения подхватятся только после перезагрузки или выполнения sysctl -p.
Это тоже понятно. На сервере эта команда стоит в скрипте, который выполняется при загрузке системы.Bizdelnick писал: ↑26.02.2020 18:34Второе — текущую конфигурацию, но не файл, поэтому изменения будут действовать только до перезагрузки.
Но мне не понятно почему это не срабатывало в моём случае.
Может быть что-то ещё мешало...
-
- Модератор
- Сообщения: 21246
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Помогите настроить маршрутизацию
Либо скрипт не запускался, либо он запускался раньше, чем подгружались настройки из sysctl.conf. А вообще не стоит городить костыли со скриптами, если вопрос решается строчкой в конфиге.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
- Сообщения: 1254
- ОС: Linux Debian
Re: Помогите настроить маршрутизацию
Сейчас посмотрел, что на "сервере",Bizdelnick писал: ↑26.02.2020 19:48не стоит городить костыли со скриптами, если вопрос решается строчкой в конфиге.
Там в /etc/sysctl.conf увидел две строки:
Код: Выделить всё
# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1
А основная задача того скрипта была настроить маршрутизацию между локальной сетью отдела и интернетом через модем.
Причём, в скрипте явно указывались IP адреса компьютеров, которым предоставлялся доступ в интернет.
Кстати, в том скрипте файлы в /proc использовали 6 строк:
Код: Выделить всё
/bin/echo 1 > /proc/sys/net/ipv4/conf/eth0/forwarding
/bin/echo 1 > /proc/sys/net/ipv4/conf/eth1/forwarding
/bin/echo 0 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
/bin/echo 0 > /proc/sys/net/ipv4/conf/eth1/proxy_arp
/bin/echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
/bin/echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
-
- Сообщения: 1139
- ОС: Fedora
Re: Помогите настроить маршрутизацию
Тут разные функции. Одноразово, на пробу — это одно. Постоянно — другое.
Только писать в стартовых скриптах что-либо в /proc/sys/… — это как-то не то. В конце концов есть же sysctl net.ipv4.…1, который делает ровно то же самое.
-
- Сообщения: 1254
- ОС: Linux Debian
Re: Помогите настроить маршрутизацию
Оказалось, что проблема всё-таки не такая простая, как показалось. И дело всё-таки в firewall. Точнее в настройках iptables.
После того, как я на a1 заменил в /etc/sysctl.conf ip_forward = 0 на ip_forward = 1 связь между a2 и as, подключённому к a1, появилась. Но возникла ещё одна задача.
К АРМам a1 и a2 подключены телефоны t1 и t2 со своими IP адресами. И нужно обеспечить между ними связь. То есть чтобы АРМы перенаправляли их пакеты. Я прописал маршруты:
На a1:
На a2:
И тут возникла странность.
С АРМа a2 пингуется как t2 с ttl=64, так и t1 с ttl=63
А вот с a1 t1 пингуется, а t2 нет. Хотя на a2 я также заменил в /etc/sysctl.conf ip_forward = 0 на ip_forward = 1.
tcpdump на интерфейсе к t2 показал, что IPCM запросы к нему от a1 приходят, а в ответ идут ARP запросы с просьбой сообщить кто имеет адрес a1. Почему a2 не сообщал ему об этом, не знаю. Видимо потому, что я удалил все сетевые маршруты кроме default.
Но потом решил посмотреть IP пакеты на интерфейсе, к которому подключен t1 и увидел, что ICMP пакеты к нему идут от a1 а не от a2. И вспомнил, что я до ip_forward = 1 возился с маскарадингом, Снял на a1 firewall (простым kill (предварительно выдав iptables-save >ts1) -- пинги t1 с a2 пропали.
Сделал на a2 iptables-restore <ts1 -- пинги t2 с a1 появились.
Видимо нужно просто добавить в /etc/rc.local строки iptables, которые будут преобразовывать адреса.
Но вот какие?...
После того, как я на a1 заменил в /etc/sysctl.conf ip_forward = 0 на ip_forward = 1 связь между a2 и as, подключённому к a1, появилась. Но возникла ещё одна задача.
К АРМам a1 и a2 подключены телефоны t1 и t2 со своими IP адресами. И нужно обеспечить между ними связь. То есть чтобы АРМы перенаправляли их пакеты. Я прописал маршруты:
На a1:
Shell
route add t1 eth1
route add t2 gw a2 eth2
Shell
route add t2 eth2
route add t1 gw a1 eth1
С АРМа a2 пингуется как t2 с ttl=64, так и t1 с ttl=63
А вот с a1 t1 пингуется, а t2 нет. Хотя на a2 я также заменил в /etc/sysctl.conf ip_forward = 0 на ip_forward = 1.
tcpdump на интерфейсе к t2 показал, что IPCM запросы к нему от a1 приходят, а в ответ идут ARP запросы с просьбой сообщить кто имеет адрес a1. Почему a2 не сообщал ему об этом, не знаю. Видимо потому, что я удалил все сетевые маршруты кроме default.
Но потом решил посмотреть IP пакеты на интерфейсе, к которому подключен t1 и увидел, что ICMP пакеты к нему идут от a1 а не от a2. И вспомнил, что я до ip_forward = 1 возился с маскарадингом, Снял на a1 firewall (простым kill (предварительно выдав iptables-save >ts1) -- пинги t1 с a2 пропали.
Сделал на a2 iptables-restore <ts1 -- пинги t2 с a1 появились.
Видимо нужно просто добавить в /etc/rc.local строки iptables, которые будут преобразовывать адреса.
Но вот какие?...