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

Переменный IP-адрес хоста в правиле iptables

Я использую CentOS 6.4 с OpenVZ на своем ноутбуке. Чтобы обеспечить доступ в Интернет для виртуальных машин, я должен применить на ноутбуке следующее правило:

iptables -t nat -A POSTROUTING -j SNAT --to-source <LAPTOP_IP>

Работает нормально.

Тем не менее, мне приходится работать в разных местах - в офисе, дома, в офисе партнера и т. Д. IP моего ноутбука в этих местах отличается, поэтому мне приходится менять приведенное выше правило каждый раз, когда я меняю место.

Я создал обходной путь, который в основном определяет IP и применяет правило:

#!/bin/bash
IP=$(ifconfig | awk -F':' '/inet addr/&&!/127.0.0.1/{split($2,_," ");print _[1]}')
iptables -t nat -A POSTROUTING -j SNAT --to-source $IP

Обходной путь выше работает. Мне осталось только выполнить это вручную. Возможно, я мог бы заставить его запускаться всякий раз, когда мой ноутбук получает IP-адрес от DHCP - как я могу это сделать?

Кроме того, мне просто интересно, есть ли в первую очередь элегантный способ сделать это - iptables? Может быть, есть синтаксис, позволяющий указать в правиле "текущий IP-адрес оборудования"?

Использовать -j MASQUERADE (взято из Документы CentOS):

Чтобы разрешить узлам LAN с частными IP-адресами взаимодействовать с внешними общедоступными сетями, настройте брандмауэр для маскировки IP, который маскирует запросы от узлов LAN IP-адресом внешнего устройства брандмауэра (в данном случае eth0):

[root@myServer ~ ] # iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Это правило использует таблицу соответствия пакетов NAT (-t nat) и указывает встроенный POSTROUTING цепочка для NAT (-A POSTROUTING) на внешнем сетевом устройстве брандмауэра (-o eth0).

POSTROUTING позволяет изменять пакеты, когда они покидают внешнее устройство брандмауэра.

В -j MASQUERADE target указывается для маскировки частного IP-адреса узла внешним IP-адресом межсетевого экрана / шлюза.

Он был предназначен для аплинков, у которых нет статических IP-адресов.