Доступ в Интернет во внутренней сети с помощью IPTables

Доступ в Интернет во внутренней сети с помощью IPTables

На частном облаке, которое я настраиваю, у меня есть несколько виртуальных машин RHEL, сетей и маршрутизатор на openstack. Мой маршрутизатор подключен к публичному Интернету, а мой узел шлюза подключен к маршрутизатору и имеет доступ в Интернет через eth0. Узел подключен к внутренней сети на eth1. У меня есть несколько внутренних узлов RHEL, подключенных к внутренней сети через их интерфейсы eth0. Все узлы могут пинговать друг друга, и я считаю, что файлы ifcfg для каждого узла настроены правильно.

Используя IPTables, я попытался предоставить внутренним узлам доступ в Интернет следующим образом:

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT  
iptables -A FORWARD -i eth0 -o eth1 -m conntrack -ctstate ESTABLISHED,RELATED -j ACCEPT  
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Я также включил переадресацию ipv4 (отключена по умолчанию) на уровне ядра. После сохранения конфигурации и SSH-подключения к внутреннему узлу я не могу пинговать внешние адреса:

# ping 8.8.8.8
connect: Network is unreachable

Мой маршрутизатор в OpenStack имеет статический маршрут с
Destination CIDR: моя внутренняя сеть
Next Hop: мой узел шлюза

Почему я не могу получить доступ в интернет на своих внутренних узлах? Что я здесь упускаю?

решение1

Возможно, вы не включили пересылку в ядре -

Пытаться

echo 1 > /proc/sys/net/ipv4/forward

Если это решит проблему, сделайте ее постоянной, отредактировав /etc/sysctl.conf и добавив строку

net.ipv4.ip_forward = 1

решение2

Network is unreachableозначает, что не определен маршрут для достижения 8.8.8.8. Скорее всего, это проблема, возвращаемая непосредственно виртуальной машиной, и она находится в виртуальной машине, а не в хосте.

OpenStack имеет множество различных возможных сетевых конфигураций. Вы просто написали «сети» и не дали никакой информации об IP-адресах виртуальных машин. Надеясь, что нет неизвестных настроек (промежуточные сети с промежуточными NAT-адресами), на каждой виртуальной машине вам нужно добавить маршрут по умолчанию через IP-адрес, установленный на eth1интерфейсе вашего маршрутизатора. Если этот IP-адрес был, например, 10.0.2.1, то это будет сделано:

ip route add default via 10.0.2.1

Для постоянных настроек его следует добавить в соответствующий файл конфигурации (см.Статические маршруты и шлюз по умолчаниюиз RedHat).

Связанный контент