Назад | Перейти на главную страницу

Какое правильное правило iptables при преобразовании нескольких частных подсетей через NAT?

У меня есть Centos Minimal 6.5, работающий как маршрутизатор. eth0 подключен к магистральному порту коммутатора Cisco, что позволяет использовать VLAN 200–213.

У меня есть несколько интерфейсов VLAN, как предлагает эта ссылка:

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s2-networkscripts-interfaces_802.1q-vlan-tagging.html

И у меня есть пересылка IPv4, поэтому все мои сетевые устройства из любой из сетей 200-213 могут связываться друг с другом, используя этот Linux-сервер в качестве своего маршрутизатора.

Проблема в том, что они мне нужны для доступа в Интернет, поэтому я добавил следующее правило:

iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -j SNAT --to 1.1.1.56

1.1.1.56 - это «внешний» адрес. Это работает нормально, устройства, подключенные к внутренним сетям, могут пинговать адреса Intertnet, НО они перестают общаться друг с другом через подсети, поэтому 192.168.211.55 может пинговать 8.8.8.8, но не может разговаривать с 192.168.213.5.

Как только я перезапускаю сервис iptables, чтобы удалить правило, я снова могу начать разговор по внутренним подсетям.

Как правильно настроить NAT для нескольких частных подсетей? А может, как правильно настроить переадресацию?

Вам также необходимо указать в своем правиле брандмауэра интерфейс назначения для трафика, который будет преобразован через NAT. В противном случае он просто попытается преобразовать все в NAT, и, как вы видели, это не сработает. Вы должны использовать NAT только для трафика, предназначенного для внешнего мира.

Итак, предположим, что ваш маршрут по умолчанию для всего вашего интернет-трафика выходит из VLAN 200 (поскольку вы не указали), VLAN, выделенной для внешнего трафика. В этом случае вы добавите -o eth0.200 к правилу брандмауэра.

iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o eth0.200 -j SNAT --to 1.1.1.56