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

Два мостовых интерфейса с несколькими IP-адресами, требуется NAT, iptables

Я пытаюсь настроить странную конфигурацию на компьютере на базе Debian.

Это своего рода промышленный ПК с двумя сетевыми интерфейсами eth0 и eth1. Я использую это как «сканирующее устройство» для использования в клиентских сетях. Некоторые из них используют DHCP, некоторые нет. Некоторые могут дать мне фиксированный IP-адрес, некоторые не могут и даже не знают, какой DHCP-адрес получит мое устройство.

Итак, я создал следующую настройку в / etc / network / interfaces:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual
auto eth1
iface eth1 inet manual

# Bridge interface
auto br0
iface br0 inet dhcp
      bridge_ports eth0 eth1
      bridge_hw aa:bb:cc:dd:ee:ff

# pre-set interface IP for client requirements, if DHCP is not working
auto br0:1
iface br0:1 inet static
    address 172.16.21.150
    netmask 255.255.255.0
    network 172.16.21.0
    broadcast 172.16.21.255
    # Gateway
    post-up route add default gw 172.16.21.254
    pre-down route del default gw 172.16.21.254


# Set default fallback interface IP address
auto br0:100
iface br0:100 inet static
    address 169.254.111.111
    netmask 255.255.255.0
    network 169.254.111.0
    broadcast 169.254.111.255

Как видите, интерфейсов три. br0 используется для DHCP, br0: 1 для статического IP-адреса, предоставленного заказчиком. Обычно br0 и br0: 1 не используются одновременно. И br0: 100 также статический, но с локальным адресом ссылки. Я использую его для доступа к коробке без подключенного монитора компьютера, просто через IP и ssh. Все это работает как шарм, за исключением случая, когда я подключаю свой ноутбук через прямое подключение к br0: 100 (помните, это своего рода виртуальный, а не выделенный физический интерфейс!).

При работе через ssh на приставке я могу получить доступ к сети клиента, а также подключиться к Интернету (помимо возможных правил fw на стороне клиента ...)

Но я не могу выйти в Интернет со своего ноутбука, а только в сеть клиента. Моя идея заключалась в том, что конфигурация локальных клиентов действительно разрешает доступ в Интернет только из их диапазона сети. Но у моего ноутбука другой диапазон. Прекрасной идеей было настроить NAT, и я попробовал эти простые правила NAT:

# IP Forwarding im Kernel aktivieren
echo 1 > /proc/sys/net/ipv4/ip_forward

# Masqerading auf br0 und br0.1 aktivieren
iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o br0:1 -j MASQUERADE

# Forwarding Regeln einrichten
# Forwarding etablierter Verbindungen von extern (br0 & br0.1) nach intern (br0.100)
iptables -A FORWARD -i br0 -o br0:100 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i br0:1 -o br0:100 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Forwarding aller Verbindungen von intern (br0.100) nach extern (br0 & br0.1)
iptables -A FORWARD -i br0:100 -o br0 -j ACCEPT
iptables -A FORWARD -i br0:100 -o br0:1 -j ACCEPT

Это нарушает всю мою настройку. Сам ящик больше не может подключиться к сети.

Я понятия не имею, что не так и как это исправить. Любые идеи приветствуются.

С уважением, Олаф

  1. Вы используете псевдонимы, а не виртуальные интерфейсы. Псевдоним - это просто IP-адрес интерфейса. Таким образом, вы не можете использовать его в --input-interface (-i) И в output-interface (-o) варианты правил iptables.

  2. Проверьте весь набор правил брандмауэра с помощью команды iptables-save -c. Скорее всего, вы увидите нулевые счетчики ваших правил, где вы указываете псевдонимы (с двоеточием в имени интерфейса).

  3. Если я вас правильно понял, вам необходимо выполнить следующие шаги, чтобы добиться желаемого:

    • На вашем ноутбуке назначьте IP-адрес из диапазона 169.254.111.0/24 (например, 169.254.111.112/24) и шлюз по умолчанию 169.254.111.111.
    • В linux box вам нужны правила iptables:
iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE

iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD --src 169.254.111.112 -j ACCEPT
  1. Также лучше отключить отправку перенаправлений в окне Linux:
sysctl -w net.ipv4.conf.all.send_redirects=0
  1. Для устранения проблем запустите tcpdump.