У меня есть машина CentOS 7 с настройкой единого интерфейса с NAT. У меня есть машина с Windows 8.1 с одним интерфейсом в качестве клиента NAT. Обе машины находятся в одной IP-сети.
Ниже приведены соответствующие записи iptables.
Конфиг 1 (рабочий)
-A POSTROUTING -o eth0 -j MASQUERADE
-A FORWARD -i eth0 -j ACCEPT
Конфиг 2 (рабочий)
-A POSTROUTING -o eth0 -j MASQUERADE
-A FORWARD -s 0.0.0.0/0 -i eth0 -j ACCEPT
Конфиг 3 - желаемый конфиг (не работает)
-A POSTROUTING -o eth0 -j MASQUERADE
-A FORWARD -s x.x.x.x/32 -i eth0 -j ACCEPT
Конфиг 1 и 2 работает. И whatismyipaddress.com
показывает адрес NAT-машины из браузера на машине Win8.1. Итак, я знаю, что NAT работает, и этот шлюз и т. Д. Правильно настроен на машине Win8.1.
Но когда я пытаюсь ограничить исходный IP-адрес в соответствии с конфигурацией 3, я теряю Интернет на машине Win8.1. И, да, я уверен, что исходный IP-адрес правильный.
Любые идеи? Нужна дополнительная информация?
-A FORWARD -s x.x.x.x/32 -i eth0 -j ACCEPT
Это означает, что x.x.x.x
IP-адрес будет разрешен для пересылки из Интернета eth0
.
+ Изменить eth0
к интерфейсу, который подключен к вашей локальной сети. Таблица пересылки применяется перед таблицей постмаршрутизации.
Если в случае 3 вашей политикой FORWARD является DROP, вы не разрешаете пересылать возвращаемый поток обратно на клиентский компьютер. Я бы сказал добавить -A FORWARD -d x.x.x.x/32 -j ACCEPT
. Я не могу быть уверенным, не зная всех ваших правил.
И, кстати, использовать только один интерфейс - не лучшая идея, но вы уже должны это знать.