Суть проблемы. Имеется локальная сеть. Имеется несколько ip адресов от провайдера. Необходимо чтобы пользователи локальной сети за натом находились с разных ip адресов, при этом весь их трафик обрабатывался сетевым приложением, типа редиректора (не squid). Примерно по схеме ниже.
Имеется интернет который приходит на сетевое устройство 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, его совершенно там нет.