У меня есть Linux-система Ubuntu, которую я хочу превратить в маршрутизатор. Он имеет 2 сетевые карты и будет располагаться между i) кабельным модемом (Интернет) и ii) беспроводным маршрутизатором (обслуживающим внутреннюю сеть). С этой простой установкой я смог отойти на некоторое расстояние, но, похоже, внизу спотыкаюсь.
(the net) cable modem -> (eth3) ubuntu box (eth1) -> linksys wifi router
[ok] dhcp-клиент ubuntu (использующий eth3) может подключаться к модему и просматривать Интернет
[ok] Ubuntu может статически назначить IP-адрес внутренней сетевой карте (eth1) с помощью команды:
sudo ifconfig eth1 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255
[ok] может установить и запустить DHCP-сервер. Клиентские машины могут получать IP-адреса и пинговать ubuntu.
После этого все начинает идти наперекосяк:
[x] через некоторое время ubuntu eth3 сохраняет свой IP-адрес, но больше не может подключаться к сети. Перезагрузка (снова вызов dhclient) возвращает меня в онлайн.
[x] ubuntu eth1 либо i) теряет IP-адрес 192.168.1.1, когда клиент запрашивает новую аренду IP, либо ii) ему назначается 192.168.1.100 (начало сетевого диапазона в '/etc/dhcp3/dhcpd.conf' - увидеть ниже). Как мне сохранить это значение на стабильном уровне?
/ и т.д. / по умолчанию / dhcp3-сервер
INTERFACES="eth1"
/etc/dhcp3/dhcpd.conf
ddns-update-style none;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option domain-name-servers 64.71.255.198;
option domain-name "frye.com";
option routers 192.168.1.1;
option broadcast-address 192.168.0.255;
default-lease-time 600;
max-lease-time 7200;
}
[x] У меня проблемы с отправкой пакетов NAT для ubuntu box с клиентских машин (eth1) в сеть (eth3). Я попытался настроить таблицы с помощью приведенных ниже команд (я также попытался поменять местами сетевые адаптеры в командах). '/etc/sysctl.conf' (и соответствующий '/ proc / sys / net / ipv4 / ip_forward') имеют ожидаемое значение '1'. Какое правильное заклинание для пересылки пакетов от eth1 -> eth3?
sudo iptables --table nat --append POSTROUTING --out-interface eth3 -j MASQUERADE
sudo iptables --append FORWARD --in-interface eth1 -j ACCEPT
Я уверен, что в обоих этих моментах мне не хватает какой-то магии конфигурации.
Спасибо за любую помощь
Тим
Несколько случайных подсказок:
Не использовать ifconfig
непосредственно для настройки сетевых адаптеров. Вместо этого поместите конфигурацию в /etc/network/interfaces
, например:
auto lo
iface lo inet loopback
auto eth3
iface eth3 inet dhcp
auto eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0
Ваш /etc/dhcp3/dhcpd.conf
похоже, есть опечатка в broadcast-address
(должно быть 192.168.1.255).
Ваш iptables
Правило MASQUERADE, вероятно, должно быть более конкретным. Это могут быть совпадающие пакеты, которые не следует использовать NAT. Я бы добавил исходное совпадение для внутренней сети, например:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth3 -j MASQUERADE
Ваше правило ACCEPT в цепочке FORWARD не требуется, при условии, что политика в цепочке FORWARD - ACCEPT (что по умолчанию).