Linux NAT Gateway

Материал из darklurker wiki
Перейти к: навигация, поиск

Для начала работы необходимо создать виртуальную машину (далее GW) с внешним IP адресом и включить на ней функционал маршрутизации и трансляции IP-адресов. На примере ОС Centos 7 настройки выглядят следующим образом. Добавим следующие значения:

root@gw1# vi /etc/sysctl.conf

net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 1
net.ipv4.conf.all.send_redirects = 1
root@gw1# reboot

Настраиваем правила трансляции адресов:

root@gw1# yum install -y iptables-services
root@gw1# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
root@gw1# systemctl enable iptables
root@gw1# service iptables save

Для настройки маршрутизации между виртуальными машинами и GW, единственный доступный сценарий на текущий момент, это настройка туннеля между виртуальной машиной и GW. Необходимо создать и настроить туннельный интерфейс на GW:

root@gw1# vi /etc/sysconfig/network-scripts/ifcfg-tun0

DEVICE=tun0
BOOTPROTO=none
ONBOOT=yes
TYPE=GRE
PEER_OUTER_IPADDR=10.10.10.8 (адрес виртуальной машины)
PEER_INNER_IPADDR=192.168.1.2 (адрес туннельного интерфейса виртуальной машины)
MY_INNER_IPADDR=192.168.1.1 (адрес туннельного интерфейса GW)
root@gw1# systemctl restart network

Настраиваем туннельный интерфейс на виртуальной машине, которая будет ходить в Интернет через GW:

root@slave # vi /etc/sysconfig/network-scripts/ifcfg-tun0

DEVICE=tun0
BOOTPROTO=none
ONBOOT=yes
TYPE=GRE
PEER_OUTER_IPADDR=10.10.10.5
PEER_INNER_IPADDR=192.168.1.1
MY_INNER_IPADDR=192.168.1.2

root@slave# systemctl restart network

Настраиваем смену маршрута при рестарте виртуальной машины:

root@slave# vi /usr/sbin/changedefault.sh
#!/bin/bash
sleep 60
/sbin/route del default
/sbin/route add default gw 192.168.1.1 

root@slave# chmod +x /usr/sbin/changedefault.sh

root@slave# crontab -e
@reboot /usr/sbin/changedefault.sh

root@slave# reboot

Если результат будет успешным, то после перезагрузки маршрут по умолчанию будет переключаться на туннель:

root@slave# ip ro
default via 192.168.1.1 dev tun0
10.10.10.0/24 dev eth0 proto kernel scope link src 10.10.10.8
192.168.1.1 dev tun0 proto kernel scope link src 192.168.1.2

root@slave# ping ya.ru
PING ya.ru (87.250.250.242) 56(84) bytes of data.
64 bytes from ya.ru (87.250.250.242): icmp_seq=1 ttl=58 time=7.07 ms