LINUX.ORG.RU
ФорумAdmin

Лучший способ подключить две сетевые карты с интернетом. Правильное построение маршрутов.

 


0

2

Лучший способ подключить две сетевые карты с интернетом. Правильное построение маршрутов.

У меня есть компьютер с убунтой (ну т.е. netplan и Network Manager) к нему подключено две сетевые карты обе с интернетом одна - eth0 с обычным интернетом за NAT вторая - eth1 с реальным IP адресом.

Как правильно прописать маршруты, что весть трафик через обычный интернет eth0

А на eth1 сделать проброс на пару портов во внутренней сети.

Задача - чтоб весь трафик шел через eth0 Но входящий трафик для проброшенных портов и установленные соединения через eth1

Вопрос чисто про маршруты. Как его лучше сделать?

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: yes
      dhcp4-overrides:
        route-metric: 100
    eth1:
      dhcp4: yes
      dhcp4-overrides:
        route-metric: 200

Или

sudo ip route add default via <eth0_gateway> dev eth0
sudo ip route add <eth0_network>/<mask> dev eth0 src <eth0_ip>
sudo ip route add <eth1_network>/<mask> dev eth1 src <eth1_ip>
sudo ip rule add from <eth1_ip> table 200
sudo ip route add default via <eth1_gateway> dev eth1 table 200
sudo ip route add <eth1_public_ip> via <eth1_gateway> dev eth1


Последнее исправление: glorsh66 (всего исправлений: 1)

Почему в твоем вопросе «или»? У тебя что, схема с нетпланом будет работать без route rules, которые ты приводишь ниже? route policy и route metric это разные вещи.

Возможно в неплане тебе нужно еще что-то вроде:

     routes:
        - to: default
          via: <eth1_gateway>
          table: 200
        routing-policy:
        - from: <eth1_ip>/<eth1_mask>
          table: 200

Правда не уверен, что оно сработает, если у тебя везде dhcp клиент.

BOOBLIK ★★★★
()
Ответ на: комментарий от BOOBLIK

Хороший совет. Не знал что так можно. Спаисбо.

glorsh66
() автор топика

Это лишнее:

sudo ip route add <eth0_network>/<mask> dev eth0 src <eth0_ip>
sudo ip route add <eth1_network>/<mask> dev eth1 src <eth1_ip>
эти маршруты и так появляются при назначении ip-адреса на интерфейс.

И вобще, тут скорее вопрос, «проброс на пару портов во внутренней сети». И там, либо добавлять маршруты к локальным сетям в table 200, или оба default маршрута в отдельные таблицы (200 и 199) и просматривать их после main, куда будут добавляться только локальные маршруты. Но, если dhcp, то он всё равно будет пытаться прописывать default в таблицу main.

mky ★★★★★
()
Ответ на: комментарий от mky

Но, если dhcp, то он всё равно будет пытаться прописывать default в таблицу main.

Это емнип как раз не проблема, можно не прописывать defgw. Реализация возможно зависит от dhcp клиента, но вроде у кого-то была отдельная опция не прописывать defgw, но даже если и нет то один фиг всю автоматизацию можно заменить на простые up/down скрипты dhcp клиента.

anc ★★★★★
()

Длиннопост может даже новую тему создать.

В итоге комп оказался с убунту 22 desktop. А на нем дефолтный NetworkManager. Понятно что можно в netplan переключить. Но я ради интереса решил поразбираться в ncli

Вводные - 2 сетевых интерфейса. Оба с интернетом. Один с «реальным IP» второй с локальной домашней сетью. Я хочу сделать так что бы весь обычный трафик шел через обычный интернет. А через реальный IP был port forwarding на внутренний веб сервер.

enp3s0 - обычный локальный интернет. 192.168.0.0/24 GW - 192.168.0.8 (да кривой адрес роутера) «Wired connection 1»

enp5s0 - Реальный IP 199.199.199.231, - GW 199.199.199.225 «Wired connection 2» с (посколькую это реальный IP я его заменил)

wg0 - вайгард.

Сделал следующие настройки (может кому будет полезен пример на NetworkManager)

#Делаем приоритет ниже, чтоб обынчый интернет был приоритетнее чем внешний
sudo nmcli connection modify "Wired connection 1" ipv4.route-metric 100
sudo nmcli connection down "Wired connection 1" && sudo nmcli connection up "Wired connection 1"

sudo nmcli connection modify "Wired connection 2" \
ipv4.method manual \
ipv4.addresses 199.199.199.231/27 \
ipv4.gateway 199.199.199.225 \
ipv4.dns "8.8.8.8 8.8.4.4"

echo "200 custom_table" | sudo tee -a /etc/iproute2/rt_tables #Почему то сразу не хотела видеться. 
ip route add default via 199.199.199.225 table 200   #Без нее почему то не работает 
sudo nmcli connection modify "Wired connection 2" +ipv4.routes "0.0.0.0/0 199.199.199.225 200"
sudo nmcli connection modify "Wired connection 2" +ipv4.routes "0.0.0.0/0 199.199.199.225 table=200"
sudo nmcli connection modify "Wired connection 2" +ipv4.routing-rules "priority 100 from 199.199.199.231/27 table 200"
sudo nmcli connection modify "Wired connection 2" ipv4.route-metric 200
sudo nmcli connection down "Wired connection 2" && sudo nmcli connection up "Wired connection 2"

Все прекрасно работает как я и хотел. Весь исходящий трафик идет через enp3s0. А входящие соединения идут на enp5s0 с реальным IP.

Но вот вопрос я хочу сделать 443 port forwarding в локальную сеть. на 192.168.0.2:443

Делаю условно так:


sudo iptables -t nat -A OUTPUT -p tcp -d 199.199.199.231 --dport 443 -j DNAT --to-destination 192.168.0.2:443
sudo iptables -A FORWARD -p tcp -d 192.168.0.2 --dport 443 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o enp3s0 -j MASQUERADE
sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

(все дефолтные политики accept для упрощения тестирования)

И вот тут не работает. Точнее работает только в том случае если я отключаю первый интерфейс. Пытался дебажить через tcpdump - понял что пакеты приходят но не возвращатся. В общем что то с роутингом не то.

А именно получается при Port forwarding не приходит обратный пакет с enp3s0

Что можете подсказать? Я уже задолбал вопросами Claude 3.5 Sonnet (кстати всем рекомендую, щас самая топовая нейронка).

У меня предоложения что нужно сделать две кастомные таблицы роутинга.

И как то прописать чтоб enp3s0 и enp5s0 ссылались друг на друга.

Второе что что то мутить с маркирование пакетов. Но как это будет с обратными пакетами работать?

glorsh66
() автор топика
Последнее исправление: glorsh66 (всего исправлений: 2)
Ответ на: комментарий от mky

Не совсем развернуто написал. Не было на момент написания поста всех данных.

Первый интерфес с DHCP Второй со статикой и реал IP и еще NetworkManager

И нужен port forwarding

glorsh66
() автор топика
Ответ на: комментарий от glorsh66

Забыл еще добавить к примеру выше:

sudo iptables -t nat -A PREROUTING -i enp5s0  -p tcp  --dport 443 -j DNAT --to-destination 192.168.0.2:443
glorsh66
() автор топика
Ответ на: комментарий от glorsh66

А входящие соединения идут на enp5s0 с реальным IP

А из своей локалки вы пробавали пингануть свой реальный IP? Или у вас такой реальный ip, что своим туда ходить не надо?

Второе что что то мутить с маркирование пакетов.

Маркировка пакетов + маркировка соединений. Гуглить по словам «connmark restore». Сначала для пакетов, попадающих под условия DNAT делаете mark пакетов каким-нибудь маркером (числом) и ″-j CONNMARK --save-mark″. Потом для пакетов от локальной сети делаете ″-j CONNMARK --restore-mark″ и делаете ″ip rule″ для этого маркера, чтобы пакеты, у которых появился маркер в результате restore-mark, попадали в table 200.

Или, если 192.168.0.2 нормальный сервер, то назначить ему ещё один ip-адрес, на который и делать DNAT и все пакеты с этого адреса отправлять в table 200. А чтобы сервер сам не мог вылезти в инет через enp5s0, рубить исходящие от него пакеты по ″state NEW″.

mky ★★★★★
()

Как правильно прописать маршруты, что весть трафик через обычный интернет eth0

А на eth1 сделать проброс на пару портов во внутренней сети.

В таком виде никак. Надо понимать, что входящим трафиком без BGP манипулировать можно только косвенно, если само соединение инициируется изнутри сети. А порты тут и вовсе не при чём.

sudo ip

sudo тут при чём вообще? Это совсем другая тема: вопрос получения прав суперпользователя. Хотя идиотов, пишущих инструкции с применением sudo сейчас достаточно развелось.

AS ★★★★★
()
Ответ на: комментарий от mky

Загуглил. сделал.

Попозже подготовлю и скину примеры как сделал марками и без.

Но проблема в том что у меня не удалось сделать настройку с марками без выставления

sudo sysctl -w net.ipv4.conf.enp5s0.rp_filter=2

Что как бы я понимаю оставляет дырень для спуфинга

glorsh66
() автор топика
Ответ на: комментарий от glorsh66

rp_filter не делает что-то такого, чего нельзя сделать в iptables. Проверяйте там пакеты и пропускайте только нужные. Как определитьесь, какого спуфинга боитесь, так правила и напишутся...

mky ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.