Я пытаюсь настроить странную конфигурацию на компьютере на базе 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
Это нарушает всю мою настройку. Сам ящик больше не может подключиться к сети.
Я понятия не имею, что не так и как это исправить. Любые идеи приветствуются.
С уважением, Олаф
Вы используете псевдонимы, а не виртуальные интерфейсы. Псевдоним - это просто IP-адрес интерфейса. Таким образом, вы не можете использовать его в --input-interface
(-i
) И в output-interface
(-o
) варианты правил iptables.
Проверьте весь набор правил брандмауэра с помощью команды iptables-save -c
. Скорее всего, вы увидите нулевые счетчики ваших правил, где вы указываете псевдонимы (с двоеточием в имени интерфейса).
Если я вас правильно понял, вам необходимо выполнить следующие шаги, чтобы добиться желаемого:
169.254.111.0/24
(например, 169.254.111.112/24
) и шлюз по умолчанию 169.254.111.111
.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
sysctl -w net.ipv4.conf.all.send_redirects=0
tcpdump
.