В интернете куча статей, которые рассказывают, как же настроить страшные iptables, что бы раздать интернет по средствам NAT с одного компьютера на другой. У меня появилась такая потребность, в тот момент, когда на основном ПК стояла kubuntu 10.10, на втором WinXP. А по большому счету, все равно какая вторая ОС. Первый раз, написав эту статью, меня посетило чувство неудовлетворенности. Настроил NAT, но DNS и IP на машинах клиентах пришлось писать вручную. А это не по «одмински»! И вот я переписал статью. И так! Нам понадобятся небольшие знания работы с консолью, базовые понятия, что такое iptables. Все еще интересно? Прошу под спойлер…
sudo nano /etc/network/interfaces
Находим там интерфейс смотрящий в локальную сеть(eth0), и настраиваем его на необходимый IP. Я взял 11.1.1.1,получилось вот так:
auto eth0 iface eth0 inet static address 11.1.1.1 netmask 255.0.0.0
Я подразумеваю, что интернет у вас уже работает, а значит, интерфейс eth1 уже настроен. Можем теперь поставить на машине-клиенте IP 11.1.1.2, маску 255.0.0.0 и перезапустить сетевые интерфейсы на сервере командой:
sudo /etc/init.d/networking restart
iptables --flush iptables --table nat --flush iptables --delete-chain iptables --table nat --delete-chain
Теперь, настроим правила для iptables:
sudo iptables -A FORWARD -i eth0 -o eth1 -s 11.1.1.0/24 -j ACCEPT sudo iptables -A POSTROUTING -t nat -j MASQUERADE
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
Потом открываем для редактирования файл /etc/sysctl.conf. Добавляем следующие строчки:
net.ipv4.conf.default.forwarding=1 net.ipv4.conf.all.forwarding=1
Вуаля. Шлюз готов к работе! Проведем тест работы NAT. Перезапускаем сетевые интерфейсы командой:
sudo /etc/init.d/networking restart
После этого на той машине, где мы ставили IP и сеть работала, поставим в настройках сетевой карты DNS адреса серверов. Можно провайдера, можно например OpenDNS: 207.68.222.222 и 207.68.220.220. После пытаемся зайти на любой сайт, и желательно не на один. Если все работает — считай пол работы сделано. У iptables есть, на мой взгляд, полезная вещь — после перезапуска системы — правила обнуляются. Что бы этого не произошло, нужно сохранить их:
sudo sh -c "iptables-save > /etc/iptables.up.rules"
Осталось дописать команду скрипт загрузки сетевых интерфейсов, которая будет подгружать наши настройки iptables. Выглядит она вот так:
pre-up iptables-restore < /etc/iptables.up.rules
Собственно на этом я прошлый раз и остановился. Но ведь наш сервер — далеко не полноценный роутер. Нужно вручную вписывать IP-шники и DNS. А вдруг DNS поменяется, прийдеть снова настраивать? Поэтому я решил продолжить.
4. Поднимим DNS и DHCP сервер. Есть простой и удобный вариант. Называется пакет dnsmasq. Работает демоном. Устанавливаем:
sudo apt-get install dnsmasq
Теперь нужно отредактировать конфиг. Я предпочитаю бекапить стандартный, и потом создавать новый с нуля. Бекапим конфиг:
sudo cat /etc/dnsmasq.conf /etc/dnsmasq.conf.default
Теперь создаем новый конфиг, открывая его для редактирования:
sudo nano /etc/dnsmasq.conf
Нам нужно будет вписать все 2 строчки, все остальное сервер сделает сам. Первая строка разрешает серверу принимать DNS запросы из локальной сети, а вторая описывает диапазон выдаваемых адресов, сетевую маску и время жизни IP адреса соотвественно:
listen-address=127.0.0.1, 11.1.1.1 dhcp-range=11.1.1.100,11.1.1.150,255.0.0.0,24h
А вот теперь осталось только перезапустить «сеть» и сам демон:
sudo /etc/init.d/networking restart sudo /etc/init.d/dnsmasq restart
Готово! Все должно заработать. Если нет — ищите ошибки, или измеряйте радиус кривизны рук или опишите в комментариях свои проблемы. P.S. У меня все работает!
Здравствуйте!
Хочу уточнить о вашей статье. Вы написали
—————————————————————————————————————————————
TEXT_№1
1. Для начала, необходимо определить, какой интерфейс у нас смотрит в интернет, а какой в локальную сеть.
У меня следующий конфиг:
eth0 смотрит в локальную сеть;
eth1 смотрит в интернет, получает IP автоматически, а протокол pppoe;
—————————————————————————————————————————————
Но затем пишите
—————————————————————————————————————————————
TEXT_№2
Находим там интерфейс смотрящий в локальную сеть(eth1 (ОБРАТИТЕ ВНИМАНИЕ)), и настраиваем его на необходимый IP. Я взял 11.1.1.1,получилось вот так:
—————————————————————————————————————————————
Может вы имели ввиду в TEXT_№2 «Находим интерфейс смотрящий в локальную сеть(eth0!!!!!!!!!!!)»?
Действительно, нахимичил когда статью переносил со старого блога. Исправил. Спасибо, что заметил.
А может всетаки не :
sudo iptables -A FORWARD -i eth1 -o eth0 -s 11.1.1.0/24 -j ACCEPT
а
sudo iptables -A FORWARD -i eth0 -o eth1 -s 11.1.1.0/24 -j ACCEPT
Спасибо).
Подскажите по такой ситуации пожалуйста. NAT настроил все работает. Мне надо чтоб по запросу ftp://mysite.com происходил форвард на машину внутри сети, в то время как FTP запросы не адресованные моему сайту уходили по назначению. Надеюсь понятно написал.
А в сети есть свой DNS сервер? Создайте в нем необходимую запись. Или вам нужно именно через NAT?
Здравствуйте, есть Proxmox v. 3.1-24
на нем запущено 5 виртуалок с ID 100…104
с выделенными IP адресами 10.0.0.1…0.5
есть сервер приложений (appserv) на 100 машине с внешним IP 37.44.ххх.ххх и внутренним 192.168.4.42
есть сервер базы (dbserv) данных с внешним IP 37.44.ххх.ххх и внутренним 170.10.16.77 (БД переносили на другой сервер)
они в одном домене dom
в общем нужна связь appserv с dbserv
из консоли сервера приложений внешний ip адрес сервера БД пингуется который начинается на 37…., а внутренний адрес который 170.10.16.77 не пингуется, но appser обращается к базе данных dbserv по внутреннему адресу 170.10.16.77
Из за этого не работает веб интерфейс нужного приложения с ошибкой 503
Подскажите как наладить связь между ними, куда смотреть, где копать?
На всех виртуалках стоит CentOs-6-x86_x64
Здравствуйте, есть Proxmox v. 3.1-24
на нем запущено 5 виртуалок с ID 100…104
с выделенными IP адресами 10.0.0.1…0.5
есть сервер приложений (appserv) на 100 машине с внешним IP 37.44.ххх.ххх и внутренним 192.168.4.42
есть сервер базы (dbserv) данных с внешним IP 37.44.ххх.ххх и внутренним 170.10.16.77 (БД переносили на другой сервер)
они в одном домене dom
в общем нужна связь appserv с dbserv
из консоли сервера приложений внешний ip адрес сервера БД пингуется который начинается на 37…., а внутренний адрес который 170.10.16.77 не пингуется, но appser обращается к базе данных dbserv по внутреннему адресу 170.10.16.77
Из за этого не работает веб интерфейс нужного приложения с ошибкой 503
Подскажите как наладить связь между ними, куда смотреть, где копать?
На всех виртуалках стоит CentOs-6-x86_x64
Ох, тут на сложном что-то :). Боюсь я не настолько специалист чтобы вот так схожу сказать. Спросите на профильном форуме или лучше на редите.
А еще зацените мой блог на английском, в шапке сайта ссылка.