У нас есть простой маршрутизатор с NAT симметричного типа, но поскольку этот маршрутизатор не предоставляет нам никакого интерфейса отладки, мы не можем определить, достигает ли конкретный пакет NAT или нет.
Таким образом, мы хотим настроить компьютер LINUX, сделав его маршрутизатором с симметричным NAT, таким образом мы можем захватывать все пакеты в этот NAT и получать нужную информацию. Как мы можем сделать это в Linux (система Fedora, ядро 2.6.xx)?
Чтобы установить Linux-машину в качестве маршрутизатора, вам понадобится следующее
1- Включите пересылку на коробке с помощью
echo 1 > /proc/sys/net/ipv4/ip_forward
Предполагая, что ваш общедоступный интерфейс - eth1, а локальный - eth0
2- Установите правило наттинга с помощью:
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
3- Принимать трафик от eth0:
iptables -A INPUT -i eth0 -j ACCEPT
4- Разрешить установленные соединения из публичного интерфейса.
iptables -A INPUT -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
5- Разрешить исходящие соединения:
iptables -A OUTPUT -j ACCEPT
Это простой скрипт, который может сделать трюк, в нем есть вся суть, необходимая для маршрутизатора, хорошо протестированного на UBUNTU 16.04.
#!/bin/bash
# This script is written to make your Linux machine Router
# With this you can setup your linux machine as gateway.
# Author @ Mansur Ul Hasan
# Email @ mansurali901@gmail.com
# Defining interfaces for gateway.
INTERNET=eth1
LOCAL=eth0
# IMPORTANT: Activate IP-forwarding in the kernel!
# Disabled by default!
echo "1" > /proc/sys/net/ipv4/ip_forward
# Load various modules. Usually they are already loaded
# (especially for newer kernels), in that case
# the following commands are not needed.
# Load iptables module:
modprobe ip_tables
# activate connection tracking
# (connection's status are taken into account)
modprobe ip_conntrack
# Special features for IRC:
modprobe ip_conntrack_irc
# Special features for FTP:
modprobe ip_conntrack_ftp
# Deleting all the rules in INPUT, OUTPUT and FILTER
iptables --flush
# Flush all the rules in nat table
iptables --table nat --flush
# Delete all existing chains
iptables --delete-chain
# Delete all chains that are not in default filter and nat table
iptables --table nat --delete-chain
# Allow established connections from the public interface.
iptables -A INPUT -i $INTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT
# Set up IP FORWARDing and Masquerading
iptables --table nat --append POSTROUTING --out-interface $INTERNET -j MASQUERADE
iptables --append FORWARD --in-interface $LOCAL -j ACCEPT
# Allow outgoing connections
iptables -A OUTPUT -j ACCEPT
Я думаю, что в других ответах упущены некоторые важные моменты. Вот другой способ, предполагая, что iptables находится в новом состоянии, снова используя eth0 как внутренний интерфейс, а eth1 как внешний:
Включите переадресацию IP в ядре:
echo 1 > /proc/sys/net/ipv4/ip_forward
Включите маскарад на eth1, чтобы переписать адрес источника в исходящих пакетах. Если вы действительно хотите симметричный NAT, вам понадобится --random
в конце:
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE --random
Настройте правила переадресации. По умолчанию iptables безоговорочно перенаправляет весь трафик. Вероятно, вы захотите ограничить входящий трафик из Интернета, но разрешить все исходящие:
# Allow traffic from internal to external
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
# Allow returning traffic from external to internal
iptables -A FORWARD -i eth1 -o eth0 -m conntrack --ctstate RELATED, ESTABLISHED -j ACCEPT
# Drop all other traffic that shouldn't be forwarded
iptables -A FORWARD -j DROP
Обратите внимание, что мы не трогали цепочки INPUT или OUTPUT в таблице фильтров; они не имеют ничего общего с роутером.
Ни одно из этих изменений не сохранится после перезагрузки.