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

Как настроить Linux-сервер в качестве маршрутизатора с NAT

У нас есть простой маршрутизатор с 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 как внешний:

  1. Включите переадресацию IP в ядре:

    echo 1 > /proc/sys/net/ipv4/ip_forward
    
  2. Включите маскарад на eth1, чтобы переписать адрес источника в исходящих пакетах. Если вы действительно хотите симметричный NAT, вам понадобится --random в конце:

    iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE --random
    
  3. Настройте правила переадресации. По умолчанию 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 в таблице фильтров; они не имеют ничего общего с роутером.

Ни одно из этих изменений не сохранится после перезагрузки.