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

Источник в туннеле GRE

В Linux я создал туннель GRE с именем gre1 172.17.1 -> 172.17.2. IP-адрес Linux-бокса - 10.10.100.100, IP-адрес конечной точки - 10.10.101.101.

Я пытаюсь сделать источник NAT (НЕ NAT назначения) для туннелирования трафика, идущего от Linux, чтобы фактически идти в туннель, если порт назначения - 80. Я безуспешно пробовал что-то в этом направлении:

iptables -t nat -A OUTPUT -p tcp --dport 80 -j SNAT --to 172.17.1.1
iptables -t nat -A FORWARD -p tcp --dport 80 -j SNAT --to 172.17.1.1

Большинство примеров, которые я нашел для туннелирования GRE, относятся к DNAT, а не к SNAT. Любой пример, который подойдет для моего случая?

Если я правильно прочитал ваш вопрос, вы хотите, чтобы трафик порта 80 шел по вашему туннелю. Это делается не с помощью SNAT, а с политикой маршрутизации.

Сначала нам нужно настроить новую таблицу маршрутизации:

# echo "2  tunnel" >> /etc/iproute2/rt_tables

Далее нам нужно настроить таблицу маршрутизации для отправки всего трафика через туннель:

# ip route add default via 172.16.1.2 dev gre1 table tunnel

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

# iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --mark 200
# ip rule add fwmark 200 table tunnel

Замените OUTPUT на FORWARD, если вы хотите, чтобы трафик пересылался по туннелю. Это работает только для локально генерируемого трафика с OUTPUT.

Вы можете найти более подробную информацию в Расширенная маршрутизация и управление трафиком Linux (LARTC) руководство.