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

NAT и два моста

У меня есть сервер Debian Squeeze (в качестве маршрутизатора и хоста для виртуальных серверов) с двумя сетевыми картами - eth0 для Интернета, eth1 для локальной сети. Я установил KVM, поэтому создал br0 (eth0, vnet0) и br1 (eth1, vnet1). Теперь мне нужно настроить доступ к локальной сети на этом сервере, но он не работает :( Что мне делать, чтобы иметь доступ в Интернет из локальной сети (трафик поступает на br1)? Все работает нормально, кроме доступа в Интернет по локальной сети.

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

Если я не использую мосты, такая конфигурация работает (с eth0 вместо br0).

В MASQUERADE target - это немного «магия», так как она использует IP-адрес, установленный на выходном интерфейсе, для исходящего трафика.

Вы можете использовать SNAT target с общедоступным IP-адресом в параметре:

iptables -t nat -A POSTROUTING -o br0 --to-source W.X.Y.Z -j SNAT

Я хочу использовать MASQUERADE target (например, если ваш публичный IP-адрес изменится), вы должны поместить правило на интерфейс, на котором установлен публичный адрес, eth0:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Хм, я настроил логирование в iptables и там был трафик с br1 на br0. Затем я проверил tcpdump на br0, и все пакеты из локальной сети были с локальным IP-адресом. Проверил еще раз iptables, добавил ту же команду iptables:

iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE

и теперь все заработало ... Возможно, я раньше делал другую ошибку ...