формально маршрутизатор - некое устройство, отвечающее за определение пути передачи данных и непосредственно передачу данных по этому пути. Маршрутизация может быть статическая - задается администратором, и динамическая - на базе какого либо протокола маршрутизации - rip, ospf, bgp и т.д. Для того что бы в сети устройство работало в сети, у него должны быть сконфигурированы сетевые интерфейсы, настроена таблица маршрутизации и сконфигурированы сетевые службы - dns, dhcp клиенты и т.д.
этапы построения Интернет шлюза:
настройка сетевых интерфейсов и указание DNS сервера
$ sudo nano /etc/network/interfaces
auto lo
iface lo inet loopback
# Wan
auto eth0
iface eth0 inet static
address 172.16.16.10
netmask 255.255.0.0
gateway 172.16.16.1
#LAN
auto eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0
$ sudo nano /etc/resolv.conf
nameserver 172.16.16.1
применение изменений:
$ sudo /etc/init.d/networking restart
Включение ip forwarding и настройка сетевой трансляции адресов (представляет собой изменение ip адресов транзитных пакетов, к маршрутизации отношения не имеет)
$ sudo nano /etc/fw
#!/bin/bash
#cat /etc/fw
# Required to enable IPv4 forwarding.
# Redhat users can try setting FORWARD_IPV4 in /etc/sysconfig/network to true
# Alternatively, it can be set in /etc/sysctl.conf
echo "1" > /proc/sys/net/ipv4/ip_forward
# This enables dynamic address hacking.
# This may help if you have a dynamic IP address \(e.g. slip, ppp, dhcp\).
# echo "1" > /proc/sys/net/ipv4/ip_dynaddr
# This enables SYN flood protection.
# The SYN cookies activation allows your system to accept an unlimited
# number of TCP connections while still trying to give reasonable
# service during a denial of service attack.
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
#
# flush all the rules in the filter and nat tables.
#
iptables -F -v
iptables -t nat -F -v
iptables -t mangle -F -v
#
# erase all chains that's not default in filter and nat table.
#
iptables -X -v
iptables -t nat -X -v
iptables -t mangle -X -v
#rc.flush-iprables end
#Интерфейсы
WAN=eth0
#WAN_VPN=ppp999
#VPN_IP="`ifconfig $WAN_VPN | head -n 2 | sed 'N;s/\n/ /' | awk '{print $8}' | sed -e 's/addr://'`"
LAN=eth1
WAN_IP="`ifconfig $WAN | head -n 2 | sed 'N;s/\n/ /' | awk '{print $7}' | sed -e 's/addr://'`"
LAN_IP="`ifconfig $LAN | head -n 2 | sed 'N;s/\n/ /' | awk '{print $7}' | sed -e 's/addr://'`"
#SQUID_IP=$LAN_IP
#SQUID_PORT="`grep transparent /etc/squid/squid.conf | awk '{print $2}'`"
#INT_NET=192.168.1.0/24
INT_NET="`ip addr show $LAN | grep inet | awk '{print $2}'`"
#Virtual Server - примеры DNAT
#http web server
# iptables -A INPUT -p tcp -m state --state NEW --dport 80 -i $WAN -j ACCEPT -v
# iptables -A PREROUTING -t nat -i $WAN -p tcp --dport 80 -j DNAT --to 192.168.1.2:80 -v
#DC
# iptables -t nat -A PREROUTING -p tcp --dport 2000 -j DNAT --to-destination 192.168.1.3
# iptables -t nat -A PREROUTING -p udp --dport 2000 -j DNAT --to-destination 192.168.1.3
# google dns
# iptables -A PREROUTING -s $INT_NET -t nat -i $LAN -p tcp --dport 53 -j DNAT --to 8.8.8.8:53 -v
# iptables -A PREROUTING -s $INT_NET -t nat -i $LAN -p udp --dport 53 -j DNAT --to 8.8.8.8:53 -v #
#transparent proxy
# echo "[+] Transparent proxy"
# iptables -t nat -A PREROUTING -i $LAN -d ! $INT_NET -m iprange --src-range 192.168.1.2-192.168.1.254 \
# -p tcp -m multiport --dport 80,8080 -j DNAT --to $SQUID_IP:$SQUID_PORT -v
# Защита цепочки Forward
iptables -P FORWARD DROP -v
iptables -F FORWARD -v
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -v
iptables -A FORWARD -m conntrack --ctstate NEW -i $LAN -j ACCEPT -v
iptables -A FORWARD -m conntrack --ctstate DNAT -j ACCEPT -v
# выбираем SNAT или MASQUERADE
iptables -t nat -F POSTROUTING -v
#iptables -t nat -A POSTROUTING -s $INT_NET -o $WAN -j MASQUERADE -v
iptables -t nat -A POSTROUTING -s $INT_NET -o $WAN -j SNAT --to-source $WAN_IP -v
# Если используется VPN для доступа в Интернет
#iptables -t nat -A POSTROUTING -s $INT_NET -o $WAN_VPN -j SNAT --to-source $VPN_IP -v
#или
#iptables -t nat -A POSTROUTING -s $INT_NET -o $WAN_VPN -j MASQUERADE -v
# Incorrect MTU Value
iptables -A FORWARD -t mangle -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Скрипту право на исполнение
$ sudo chmod +x /etc/fw
добавление /etc/fw в автозагрузку, 3 варианта
1) добавить в /etc/rc.local до exit 0
/etc/fw
2) написать скрипт инициализации
#!/bin/bash
#cat /etc/init.d/iptables
IPT="/sbin/iptables"
START="/bin/bash"
PATH="/sbin:/bin:/usr/sbin:/usr/bin"
NAME="$0"
N="/etc/init.d/$NAME"
if [ ! -f /etc/fw ]; then
echo "/etc/fw does not exist"
exit 0
fi
case "$1" in
start|restart)
echo -n "Starting up netfilter firewall..."
$START /etc/fw
echo "done."
;;
stop)
$IPT -t filter -F
$IPT -t filter -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
echo "done."
exit 0;
;;
*)
echo "Usage: $N {start|restart|stop}" >&2
exit 1
;;
esac
exit 0
и добавить в автозагрузку
$ sudo update-rc.d iptables defaults
3) добавить директиву в /etc/network/interfaces
#LAN
auto eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0
post-up /etc/fw
Установка DNS и DHCP серверов - по вкусу и задачам
$ sudo aptitude update && sudo aptitude install dnsmasq
$ sudo mv /etc/dnsmasq.conf /etc/dnsmasq.bak
$ sudo nano /etc/dnsmasq.conf
interface=eth1
dhcp-range=192.168.1.2,192.168.1.254,12h
dhcp-option=3,192.168.1.1
$ sudo /etc/init.d/dnsmasq restart