Рейтинг:0

Маршрутизация трафика одной машины через туннель GRE на удаленный NAT

флаг vn

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

Вот ситуация:

  • Его домашняя сеть 192.168.1.0/24 и он находится за маршрутизатором Linux, который выполняет NAT и имеет общедоступный IP-адрес. А.А.А.А.. Маршрутизатор Linux работает под управлением openSUSE 15.3.
  • В домашней сети есть одно конкретное интересующее устройство по адресу 192.168.1.17.
  • У него есть удаленная машина с Linux, которая находится в Интернете по адресу B.B.B.B.. Эта машина является размещенным сервером и находится в другой части страны. На этой машине также работает openSUSE 15.3.

Чего он хочет, так это для всех 192.168.1.17, который будет маршрутизироваться через NAT удаленной машины B.B.B.B., но чтобы все остальные машины в домашней сети не пострадали (т. е. по-прежнему маршрутизировались через домашний маршрутизатор А.А.А.А. как обычно).

В результате для внешнего мира все 192.168.1.17трафик будет исходить из B.B.B.B. вместо А.А.А.А..

Это как NAT/сетевой эквивалент "бросая свой голос" для одной конкретной машины в вашей сети.

Рейтинг:0
флаг vn

Вот как мы это сделали.

Мы настроили GRE-туннель между А.А.А.А. и B.B.B.B. (интерфейс gre1 на обоих серверах) с внутренними IP-адресами туннеля точка-точка 10.0.0.1 и 10.0.0.2 (соответственно). Обратите внимание, что нет необходимости в шифровании, потому что пакеты в туннеле будут просто развернуты и отправлены через Интернет как есть.

Далее нам нужно настроить B.B.B.B. включить NAT на его внешнем интерфейсе eth0. Это делается через брандмауэр. Затем мы должны добавить пользовательское правило в брандмауэр чтобы не блокировать входящие пакеты GRE. Мы ставим gre1 интерфейс в доверенный зоне, поэтому все пакеты, поступающие внутрь туннеля, разрешены и будут обработаны NAT.

В домашней сети мы уже были настроены через брандмауэр в качестве NAT-маршрутизатора, поэтому оставалось только (а) создать другую сторону туннеля GRE и (б) заставить Linux перенаправлять 192.168.1.17Исходящий трафик в туннель. Этот последний шаг является немного сложной частью.

Подробности ниже...

Настройка включена B.B.B.B. (Удаленный сервер)

Добавить интерфейс gre1:

    # /etc/sysconfig/сеть/ifcfg-gre1
    STARTMODE='при загрузке'
    BOOTPROTO='статический'
    ТУННЕЛЬ='gre'
    TUNNEL_LOCAL_IPADDR='B.B.B.B'
    TUNNEL_REMOTE_IPADDR='А.А.А.А'
    IPADDR='10.0.0.2'
    REMOTE_IPADDR='10.0.0.1'
    TUNNEL_TTL='64'
    ЗОНА=доверенная

Добавьте маршрут к домашней сети и удаленной стороне P2P-соединения через gre1:

    # /etc/sysconfig/сеть/ifroute-gre1 
    # Параметры интерфейса сетевой маски шлюза назначения
    192.168.1.0/24 - - -
    10.0.0.1 - - -

Настроить брандмауэр с помощью брандмауэр yast2

  • Поставить интерфейс eth0 в зоне внешний
  • Поставить интерфейс gre1 в зоне доверенный
  • Добавить пользовательское правило брандмауэра в зону внешний разрешение входящих GRE-пакетов от А.А.А.А.
  • Добавьте кастомные правила брандмауэра, чтобы зажать TCP MSS на оба внешний и доверенный зоны (требуется брандмауэр >= 1.0.0)

Файлы зоны в /etc/брандмауэр/зоны:

    # /etc/firewalld/zones/external.xml    
    <зона>
        <short>Внешний</short>
        <имя службы="ssh"/>
        ...
        <маскарад/>
        <правило семейства="ipv4">
          <исходный адрес="А.А.А.А."/>
          <принять/>
        </правило>
        <правило>
          <tcp-mss-clamp value="1420"/><!-- требуется firewalld >= 1.0.0 -->
        </правило>
        <имя интерфейса="eth0"/>
    </зона>
    # /etc/firewalld/zones/trusted.xml    
    <целевая зона="ПРИНЯТЬ">
      <short>Надежный</short>
      <description>Все сетевые подключения разрешены.</description>
      <правило>
          <tcp-mss-clamp value="1420"/><!-- требуется firewalld >= 1.0.0 -->
      </правило>
      <имя интерфейса="gre1"/>
    </зона>

Настройка включена А.А.А.А. (Сервер домашней сети)

Это предполагает, что А.А.А.А. уже настроен на NAT 192.168.1.0/24 сеть и т. д.

Добавить интерфейс gre1:

    # /etc/sysconfig/сеть/ifcfg-gre1
    STARTMODE='при загрузке'
    BOOTPROTO='статический'
    ТУННЕЛЬ='gre'
    TUNNEL_LOCAL_IPADDR='А.А.А.А'
    TUNNEL_REMOTE_IPADDR='B.B.B.B'
    IPADDR='10.0.0.1'
    REMOTE_IPADDR='10.0.0.2'
    TUNNEL_TTL='64'
    ЗОНА='доверенная'

Добавить маршрут к удаленной стороне P2P-соединения через gre1:

    # /etc/sysconfig/сеть/ifroute-gre1 
    # Параметры интерфейса сетевой маски шлюза назначения
    10.0.0.2 - - -

Настроить брандмауэр с помощью брандмауэр yast2:

  • Поставить интерфейс gre1 в зоне доверенный
  • Интерфейс eth0 уже должен быть в зоне внешний

Активация перенаправления

Это последняя «сложная часть», которая вызывает 192.168.1.17исходящий трафик будет перенаправлен через туннель GRE.

Чтобы включить перенаправление, запустите эти команды на А.А.А.А.:

$ ip route очистить таблицу 10
$ ip route добавить таблицу 10 по умолчанию через 10.0.0.2 dev gre1
$ ip rule add from 192.168.1.17 таблица 10 приоритет 10

Чтобы отменить приведенные выше команды:

$ ip rule del from 192.168.1.17 таблица 10 приоритет 10
$ ip route очистить таблицу 10

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.