LINUX.ORG.RU
ФорумAdmin

nft / NAT / configs

 , ,


0

1

Привет, начал изучать nftables, решил попрактиковаться, для практики создал себе подсетку со шлюзом на centos 8(с двумя сетевушками ens32(получает все по dhcp и смотрит в мою реальную сеть 192.168.57.0/24 c ip 192.168.57.36 ) и вторая сетевуха ens34 задал только ip 192.168.77.77 смотрит в сеть 192.168.77.0/24 ). Forward в /etc/sysctl.conf прописал.
Selinux вырубил, firewalld вырубил. Для практики решил разобраться в настройке NAT. Задачи следующие:
1) Чтобы все клиенты внутренней подсетки 77.0/24 транслировались через сетевуху 192.168.57.36 в сеть и 192.168.57.0/24 и имели доступ ко всем ее ресурсам в том числе и выход в интернет
2) С сетки 192.168.57.0 имели доступ только к одному ресурсу(http, https ,ssh) подсети 77.0 ( к примеру сайт с ip 192.168.77.111 )
Добавил только одно правило в nft

table ip nat {
        chain PREROUTING {
                type nat hook prerouting priority dstnat; policy accept;
        }

        chain INPUT {
                type nat hook input priority 100; policy accept;
        }

        chain POSTROUTING {
                type nat hook postrouting priority srcnat; policy accept;
                ip saddr 192.168.77.0/24 oif "ens32" snat to 192.168.57.36
        }

        chain OUTPUT {
                type nat hook output priority -100; policy accept;
        }
}


Все ресурсы 192.168.57.0 стали доступны для машинок сети 77.0/24. Сделал проброс icmp из сети 77.111 на 192.168.57.177 пакеты идут от отправителя 192.168.57.36(мой шлюз)
Вопросы возникли следующие:
1) Почему у меня адреса транслируются без заданного правила маскарадинга. Так как до этого я понимал принцип работы так: это правило

ip saddr 192.168.77.0/24 oif "ens32" snat to 192.168.57.36 
создает запись в таблице nat, а уже правило
nft add rule nat postrouting masquerade
делает магию трансляции ip по таблице nat. Если я не прав то объясните пожалуйста как это работает. Да и в общем правильно ли я все делаю ? 2) Не могу догнать как правильно сделать проброс из сети 192.168.57.0 к 192.168.77.111(сайт), у меня есть дефолтный шлюз 192.168.57.55 все пакеты сети 57.0/24 идут через него, я понимаю что на нем нужно сделать forward на 192.168.57.36 и прописать проброс на 192.168.77.77 -> 192.168.77.111. Вот только нигде в офф манах не могу найти примеры с маршрутизацией.
Так же хочу сказать что с netfilter и iptables раньше никогда дела не имел так что не бросайте камни, а помогите разобраться новичку. Кто не жадный можете пожалуйста поделиться своими конфигами с настройками nft для разбора, так как в офф манах все очень поверхностное без объяснений реализации, да и в целом далеко от реальных проектов.



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

masquerade - это хитрый вариант snat в котором src вычисляется по результату роутинга.

«nft add rule nat postrouting masquerade» - это лютый пипец! Нафига натить все?

vel ★★★★★
()

Если правый адрес (получатель) статический, то и snat вполне достаточно. masquerade более тяжёлый т.к. запрашивает адреса каждый раз и, если получатель адреса не меняет, то snat предпочтительней.

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

«nft add rule nat postrouting masquerade» этот пример брал из офф мана https://wiki.nftables.org/wiki-nftables/index.php/Performing_Network_Address_Translation_(NAT), более тонкой настройки с сожалению не могу найти, поэтому и обратился сюда.

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

Так нормальное же было правило изначально. По-русски, если с <такого-то> диапазона на интерфейс <такой-то> идёт пакет, то преобразовываем адрес в <такой-то>.

nft add rule nat postrouting masquerade

@vel прав, оно конечно «магически» работает, но нагрузка и скорость - боль печаль.

Про сайт: А просто drop все хождение из сети в сеть, и перед этим accept только на нужный ip?

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

Так нормальное же было правило изначально. По-русски, если с <такого-то> диапазона на интерфейс <такой-то> идёт пакет, то преобразовываем адрес в <такой-то>.

Как я понял snat уже реализует функцию трансляции ip и без маскарадинга, но тогда в чем их функциональная разница ? просто во всех источниках написано что маскарадинг в нат это функция трансляции ip. Я даже видел в каких то конфигах комбинировали две эти функции в postrouting

Про сайт: А просто drop все хождение из сети в сеть, и перед этим accept только на нужный ip

Это то я могу сделать но проблема в другом, у меня шлюз по дефолту 192.168.57.55(через него идут все пакеты сетки 192.168.57.0/24), а сетка 192.168.77.0/24 привязана к шлюзу 192.168.57.36. То есть пока я не пропишу маршруты на .57.55 роут ту 57.36, пакеты не дойдут. Я конечно могу поставить машинкам в сети 57.0/24 шлюз 192.168.57.36 и у меня будет доступ к сети 192.168.77.0/24 но это не решение. Я могу прописать маршруты в nmcli и все будет работать, но хочу это решить с помощью nft. Просто не могу найти синтаксического примера с пробросом маршрутов в nft. Не могу понять нужно ли создавать отдельную цепь c type route hook forward и как пишется само правило роутинга в nft: все_пакеты_сети 192.168.57.0/24 с заголовком_ip_получателя 192.168.77.111 отправлять_на 192.168.57.36.

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

Это пример вредного совета (про masquerade). Нужно ограничить область применения этого правила либо адресом сети либо, исходящим интерфейсом.

В larc тоже есть неудачный пример с policy routing который все растиражировали.

vel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.