У цій нотатці буде розказано як за допомогою iptables налаштувати системи з Ubuntu та Debian для роздачі інтернету іншим комп'ютерам локальної мережі. На простому прикладі буде показано як машину з двома мережевими інтерфейсами (до одного надходить інтернет, з іншого — «виходить») зробити шлюзом.
Припустимо, що апаратно-мережева частина вже повністю налаштована, на вашій машині є працездатний інтернет, і ви бачите інші комп'ютери мережі. Тому давайте розберемося до чого, для цього введемо команду:
ifconfig
Вона видасть список мережних інтерфейсів, що працюють в даний момент. Серед них треба впізнати ті, що починаються зі слів "Link encap: Ethernet" - це інтерфейси мережевих карток. Як правило, це eth0 та eth1.
Тепер потрібно впізнати, в який з них надходить інтернет, а з якого «виходить». Найпростіше це зробити за їхніми ip-адресами.
Отже, допустимо через eth0 ви отримуєте інтернет (наприклад через adsl-модем за протоколом ppp), а eth1 пов'язує вас з локальною мережею.
Якщо локальна мережа налаштована через Network Manager, ми рекомендуємо прописати ці налаштування безпосередньо в системному конфігураційному файлі мережі:
sudo nano /etc/network/interfaces
Тут виправте налаштування вашого мережного інтерфейсу, підключеного до локальної мережі (у нашому випадку eth1), відповідно:
автомобіль eth1
iface eth1 inet static
адреса 192.168.0.10
маска мережі 255.255.255.0
мережа 192.168.0.0
трансляція 192.168.0.255
Значення address - це айпі вашої машини в локальній мережі, за цією адресою власне і буде розташовуватися шлюз.
Значення netmask — у локальних мережах цього діапазону найчастіше така. Для інших діапазонів можна визначити тут.
Значення мережі та broadcast будуть залежати від вашої адреси. Тобто, якщо ваш локальний IP - 10.0.0.10, то network і broadcast будуть 10.0.0.0 і 10.255.255.255 відповідно.
Або, це можна зробити лише однією командою:
sudo ifconfig eth1 192.168.0.10
Ця команда самостійно налаштує вашу мережну карту eth1 на використання статичної айпі-адреси, і самостійно пропише описані вище налаштування файлу /etc/network/interfaces
У будь-якому випадку, після цих змін перезапустіть networking:
sudo /etc/init.d/networking restart
або
sudo systemctl restart networking.service
Командою:
ifconfig
перевірте, чи зміни набули чинності і все працює.
Тепер залишилася справа за малим. Якщо ви вже намагалися налаштувати вашу систему шлюзом, але у вас не вийшло або з якихось інших причин ви хочете обнулити всі налаштування файрвола iptables, то це можна зробити наступними командами:
iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain
Якщо прямої необхідності у скиданні налаштувань iptables немає, то краще цього не робити.
Наступні команди налаштують ваш iptables для NAT-трансляції (NAT, Network Address Translation — «перетворення мережевих адрес») через Ubuntu-шлюз:
#sudo iptables -A FORWARD -i eth0 -o eth1 -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
#sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A POSTROUTING -t nat -j MASQUERADE
Якщо необхідні мережні інтерфейси відрізняються від eth0 і eth1, то просто змініть перший рядок відповідним чином.
Якщо ваша локальна мережа знаходиться поза діапазоном 192.168.xx, маску підмережі для вказівки в першому рядку ви зможете легко обчислити через сервіс Network Calculators.
Тепер для конфігурації gateway'я для роутингу між двома інтерфейсами необхідно включити IP-форвардинг командою:
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
І останній штрих: треба відредагувати файл sysctl.conf:
sudo nano /etc/sysctl.conf
Додайте в нього ці два рядки для активації роутингу:
#net.ipv4.conf.default.forwarding=1
#net.ipv4.conf.all.forwarding=1
net.ipv4.ip_forward=1
sudo sysctl -p
Після цього ваш інтернет-шлюз готовий до роботи. Можете настроювати клієнтські машини. На нашому прикладі для них gateway буде 192.168.0.10
sudo cat /etc/resolv.conf
Якщо всі внесені вами зміни працюють коректно і ви бажаєте внести ці налаштування в автозавантаження (а саме, наведені вище налаштування iptables втрачають активність після перезавантаження системи), то збережіть нинішню робочу конфігурацію iptables у файл командою:
sudo sh -c "iptables-save > /etc/iptables.up.rules"
Після цього до самого файлу мережевих налаштувань /etc/network/interfaces (sudo nano /etc/network/interfaces) до параметрів вашого мережного інтерфейсу, наприклад, з якого до вас надходить інтернет (у нашому випадку – це eth0) додайте рядок:
pre-up iptables-restore < /etc/iptables.up.rules
Тобто воно стане приблизно такого вигляду:
автомобіль eth0
iface eth0 inet посібник
pre-up iptables-restore < /etc/iptables.up.rules
Тільки не змінюйте значення у рядку iface, просто додайте вказаний рядок останнього у розділі auto eth0 (ну чи якогось іншого мережного інтерфейсу). Після цього під час перезавантаження збережені налаштування iptables будуть підніматися автоматично.