Как раздать интернет используя netns и iptables?

Суть проблемы. Имеется локальная сеть. Имеется несколько ip адресов от провайдера. Необходимо чтобы пользователи локальной сети за натом находились с разных ip адресов, при этом весь их трафик обрабатывался сетевым приложением, типа редиректора (не squid). Примерно по схеме ниже.
624aaa159620a045765516.jpeg

Имеется интернет который приходит на сетевое устройство enp4s0.
Имеется локальная сеть, в которую смотрит сетевое устройство enp2s0.
Создаю netns с именем netns0, у него 2 сетевых устройства внутри:
1. eth0, который мостом к enp4s0 .
2. ceth0 который связывает с veth0
Снаружи netns есть адаптер veth0, который связан с ceth0.

Через iptables раздача интернета с enp4s0 на enp2s0 работает без проблем. А вот как трафик с локальной сети enp2s0 завернуть на veth0, и внутри netns0 с интерфейса ceth0 перенаправлять на eth0 ?
Список команд, которые использовались для создания netns0 и настройки интерфейсов,
ip netns add netns0
ip link add veth0 type veth peer name ceth0
ip link set ceth0 netns netns0
ip link set veth0 up
ip addr add 10.0.2.2/24 dev veth0
ip net exec netns0 ip link
ip net exec netns0 ip link set lo up
ip net exec netns0 ip link set ceth0 up
ip net exec netns0 ip addr add 10.0.2.1/24 dev ceth0
ip link add eth0 link enp4s0 type macvlan mode bridge
ip link
ip link set eth0 netns netns0
ip net exec netns0 ip link set eth0 up
ip net exec netns0 ip addr add xxx.xxx.xx.10/24 dev eth0
ip net exec netns0 ip addr sho dev eth0
ip net exec netns0 ip r a default via xxx.xxx.xx.1 dev eth0

После этого пытаюсь раздачу внутри netns сделать:
ip net exec netns0 sysctl net.ipv4.ip_forward=1
ip net exec netns0 iptables -A FORWARD -i eth0 -o ceth0 -m conntrack --ctstate NEW -j ACCEPT
ip net exec netns0 iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
ip net exec netns0 iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE

И пытаюсь из локальной сети трафик на netns завернуть:
iptables -A FORWARD -i enp2s0 -o veth0 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A POSTROUTING -t nat -o veth0 -j MASQUERADE

Но вот не удается. Я так понял, трафик в netns из локальной сети даже не пытается бежать, хотя с обычным маскарадом без netns это работает. Пинг из netns до внешнего мира нормально идет, а значит мост между netns0 от eth0 до enp4s0 работает. Но вот пытаясь смотреть трафик внутри netns, его совершенно там нет.
  • Вопрос задан
  • 332 просмотра
Пригласить эксперта
Ответы на вопрос 2
martin74ua
@martin74ua Куратор тега Компьютерные сети
Linux administrator
потому что вам надо еще маршрутизацию трафика настроить. ip rule и ip route ваши друзья в этом вопросе
Ответ написан
@Drno
могу ошибаться, но в цепочку prerouting можно прописать нужные IP и далее уже направить в нужный шлюз
ну либо там же маркировать, и по маркировке отдавать в нужный шлюз
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы