У меня есть Centos Minimal 6.5, работающий как маршрутизатор. eth0 подключен к магистральному порту коммутатора Cisco, что позволяет использовать VLAN 200–213.
У меня есть несколько интерфейсов VLAN, как предлагает эта ссылка:
И у меня есть пересылка 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