Пытаюсь решить задачу. При себе: ubuntu 18.04, nginx 1.14 с php-fpm 7.2, nftables 0.8.2/iproute2.О проблеме:
имеется две виртуальные сетевые карты реализованные средствами proxmox 5.2 с разными айпи адресами (серый и белый с лупбеком), php скриптом опрашивается удалённый сервер по UDP, запросы посылаются с серого адреса в ожидании ответа. Ответ от удалённого сервера не приходит (особенность сети, придёт если отправить с белого (наверно)).
netstat -anoptu
udp 0 0 192.168.1.200:51442 176.12.33.34:7066 ESTABLISHED 821/php off (0.00/0/0)
udp 0 0 192.168.1.200:42282 176.12.33.34:7066 ESTABLISHED 821/php off (0.00/0/0) ip a
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether ce:f9:8c:4e:46:48 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.200/24 brd 192.168.1.255 scope global ens18
valid_lft forever preferred_lft forever
inet6 fe80::ccf9:8cff:fe4e:4648/64 scope link
valid_lft forever preferred_lft forever
3: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether c6:b2:8f:4b:fb:ac brd ff:ff:ff:ff:ff:ff
inet 176.12.33.33/32 scope global ens19
valid_lft forever preferred_lft forever
inet6 fe80::c4b2:8fff:fe4b:fbac/64 scope link
valid_lft forever preferred_lft forever ip route
default via 192.168.1.1 dev ens18 proto static
192.168.1.0/24 dev ens18 proto kernel scope link src 192.168.1.200 О задаче:
с помощью nftables или iproute2 перенаправить трафик определённого пользователя (от которого запускается php-fpm) с серого адреса на белый.
Как достигнуть результата?
Ничего не понял
> Ничего не понялДержите нас в курсе!
> О задаче:
> с помощью nftables или iproute2 перенаправить трафик определённого пользователя (от которого
> запускается php-fpm) с серого адреса на белый.
> Как достигнуть результата?У iptables был модуль owner:
-m owner --uid-owner 500
Начнем с того что сеть белая всего /32
Все решается простым роутингом без шаманств с iptables/nftables
Может вы маску не правильную задали, потому что при /30 искомый 176.12.33.34 и 176.12.33.33 оказываются в одной сети.
> Начнем с того что сеть белая всего /32
> Все решается простым роутингом без шаманств с iptables/nftables
> Может вы маску не правильную задали, потому что при /30 искомый 176.12.33.34
> и 176.12.33.33 оказываются в одной сети.Верно. В моём случае опечатка. Спасибо (поправить не могу, сеть заканчивается на 34).
>> Начнем с того что сеть белая всего /32
>> Все решается простым роутингом без шаманств с iptables/nftables
>> Может вы маску не правильную задали, потому что при /30 искомый 176.12.33.34
>> и 176.12.33.33 оказываются в одной сети.
> Верно. В моём случае опечатка. Спасибо (поправить не могу, сеть заканчивается на
> 34).Роутингом не могу решить. У меня маршруты выдаёт Bird и в таблице роута они не отображаются.
По факту я пытаюсь добавить дефолтный маршрут с белым гетвеем, также пытался переадресовать с серого на белый. В общем-то ни в какую, тк белый гетвей висит на уровне бёрда.
p.s. В роутинге тоже в овнера можно.p.s2. Могу говорить глупости, в сетях очень слаб. Средствами iptables не удалось решить, про овнера знал (спасибо).
Есть обладающие временем и желанием подсобить с правилом для iptables?
>[оверквотинг удален]
> valid_lft forever preferred_lft forever
> inet6 fe80::c4b2:8fff:fe4b:fbac/64 scope link
> valid_lft forever preferred_lft forever
> ip route
> default via 192.168.1.1 dev ens18 proto static
> 192.168.1.0/24 dev ens18 proto kernel scope link src 192.168.1.200
> О задаче:
> с помощью nftables или iproute2 перенаправить трафик определённого пользователя (от которого
> запускается php-fpm) с серого адреса на белый.
> Как достигнуть результата?iptables -A POSTROUTING -t nat -d 176.12.33.34 -j SNAT --to-source 176.12.33.33
Или я что то не понял. 176.12.33.33 маршрутизируем обратно? Нет ли ещё ната между. Мне кажется ты просто ляпнул на интерфейс белый адрес, а он извне и недоступен.
>[оверквотинг удален]
>> default via 192.168.1.1 dev ens18 proto static
>> 192.168.1.0/24 dev ens18 proto kernel scope link src 192.168.1.200
>> О задаче:
>> с помощью nftables или iproute2 перенаправить трафик определённого пользователя (от которого
>> запускается php-fpm) с серого адреса на белый.
>> Как достигнуть результата?
> iptables -A POSTROUTING -t nat -d 176.12.33.34 -j SNAT --to-source 176.12.33.33
> Или я что то не понял. 176.12.33.33 маршрутизируем обратно? Нет ли ещё
> ната между. Мне кажется ты просто ляпнул на интерфейс белый адрес,
> а он извне и недоступен.Имею виртуальную машину, с двумя виртуальными сетевыми интерфейсами.
На первом интерфейсе у меня серая сеть - 192.168.1.200.
На втором интерфейсе у меня белая сеть - 176.12.33.34.PHPшный скрипт у меня выполняется по дефолтному маршруту серой сети, мне нужно пускать по белой.
С маршрутами для белой сети есть некоторые сложности, поэтому ищу альтернативный вариант.Рассматривал такой вариант:
iptables -t mangle -A OUTPUT -m owner --uid-owner "www-data" -j MARK --set-xmark 100
iptables -t nat -A POSTROUTING -m mark --mark 100 -j SNAT --to-source 176.12.33.34В данном случае любой трафик, а именно выполнение .php скриптов блокируется.
В общем-то да, есть NAT - juniper srx (100h).
Разбейте проблему на 2 части.1. Пусть решение о маршрутизации принимается в зависимости от src addr отправляемого пакета. Для этого можно воспользоваться механизмом Policy Based Routing, что, в принципе, полезно в общем случае наличя сетевых интерфейсов в разных сетях.
Это во многих местах описанно, есть разные методы, зависит от конкретной конфигурации и предпочтений. Например:
https://serverfault.com/questions/524054/simple-multihomed-l...
https://www.linuxjournal.com/article/7291
И вообще, Policy Based Routing и его понимание вещи полезные, не только для приминения но и просто чтобы знать чего ожидать в разных ситуациях.
https://en.wikipedia.org/wiki/Policy-based_routing
https://blog.scottlowe.org/2013/05/29/a-quick-introduction-t.../
https://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.simp...
https://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.mult...2. Пусть ваш сервер применяет првильную таблицу маршрутизации в каждом случае. Есть разные варианты, например:
- Непосредственно из клиентского софта указать, с какого локального адреса отправлять пакеты, тогда правило "ip rule src ..." из предыдущей части просто сработает. Некоторые программы так умеют, некоторые нет.
- Через команду "ip rule", указать напрямую какую таблицу надо использовать, если известен адрес получателя (фильтр to), или порт (фильтры ipproto, sport, dport).
- Промаркировать пакет из netfilter (там выше вам примеры давали), например на основе uid-owner, и указать таблицу с помощю "ip rule" по фильтру fwmark.Много документации уже написанно, как сделать то или другое, посмотрите.
Удачи.