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

Маршрутизация IP от сервера A к серверу B

Я пытаюсь перенаправить 137.74.9.193 с сервера A на сервер B (Ubuntu 16.04).

Если я попытаюсь выполнить эхо-запрос 137.74.9.193 с сервера A, он будет работать должным образом, но когда я попытаюсь выполнить эхо-запрос со своего персонального компьютера, это не сработает.

Сервер A:

Public IP (ens3): 213.32.69.16
Public IP: 137.74.9.193
Local Tunnel IP: 10.0.0.1

Сервер B:

Public IP (eth0): 139.59.131.76
Local Tunnel IP: 10.0.0.2

Конфигурация на сервере A:

нано / и т.д. / сеть / интерфейсы

auto lo
iface lo inet loopback

auto ens3
iface ens3 inet dhcp

auto tun1
iface tun1 inet static
    address 10.0.0.1
    netmask 255.255.255.252
    pre-up iptunnel add tun1 mode gre local 213.32.69.16 remote 139.59.131.76 ttl 255
    up ifconfig tun1 multicast
    up ifconfig tun1 arp
    up ifconfig tun1 broadcast
    pointopoint 10.0.0.2
    post-up ip route add 137.74.9.193 via 10.0.0.2 dev tun1
    post-down iptunnel del tun1

Выполненные команды:

# enable ip forward
$ echo 1 > /proc/sys/net/ipv4/ip_forward
$ echo 1 > /proc/sys/net/ipv4/conf/ens3/proxy_arp

# Add ip to arp to complete the loop.
$ arp -s 137.74.9.193 fa:16:3e:76:31:ea -i ens3 pub

Результат Таблица IP-маршрутизации ядра:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         213.32.64.1     0.0.0.0         UG    0      0        0 ens3
10.0.0.2        *               255.255.255.255 UH    0      0        0 tun1
ip193.ip-137-74 10.0.0.2        255.255.255.255 UGH   0      0        0 tun1
213.32.64.1     *               255.255.255.255 UH    0      0        0 ens3

Конфигурация на сервере B:

нано / и т.д. / сеть / интерфейсы

auto eth0
iface eth0 inet static
        address 139.59.131.76
        netmask 255.255.240.0
        gateway 139.59.128.1
iface eth0:0 inet static
        address 137.74.9.193
        netmask 255.255.255.255
        broadcast 137.74.9.193

auto tun1
iface tun1 inet static
        address 10.0.0.2
        netmask 255.255.255.252
        pre-up iptunnel add tun1 mode gre local 139.59.131.76 remote 213.32.69.16 ttl 255
        up ifconfig tun1 multicast
        up ifconfig tun1 arp
        up ifconfig tun1 broadcast
        pointopoint 10.0.0.1
        post-down iptunnel del tun1

Выполненные команды:

# enable ip forward
$ echo 1 > /proc/sys/net/ipv4/ip_forward

# Route to tun1
ip route add 10.0.0.1 dev tun1

Таблица IP-маршрутизации ядра:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    0      0        0 eth0
10.0.0.1        *               255.255.255.255 UH    0      0        0 tun1
10.19.0.0       *               255.255.0.0     U     0      0        0 eth0
139.59.128.0    *               255.255.240.0   U     0      0        0 eth0

Спасибо за любую помощь :)

ОБНОВЛЕНИЕ (14.11.2016): добавление команд маршрута на сервере B

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

arp -s 137.74.9.193 fa:16:3e:76:31:ea -i ens3 pub

не делает то, что вы думаете. Эта команда создает новую запись в таблице ARP на вашем сервере, так что если ваш сервер должен отправлять пакеты через ens3 к 137.74.9.193 он не будет выполнять никаких запросов ARP, потому что вы уже указали MAC-адрес назначения.

Но вам также необходимо убедиться, что маршрутизатор знает, что нужно отправлять пакеты на ваш сервер. Маршрутизатор отправит запрос ARP для 137.74.9.193. Но поскольку этот IP-адрес не назначен никакому интерфейсу на вашем сервере, ваш сервер не будет отвечать на эти запросы ARP.

Чтобы это сработало, вам нужно включить прокси-ARP, что вы можете сделать с помощью этой команды:

echo 1 > /proc/sys/net/ipv4/conf/ens3/proxy_arp

Если вы используете эту команду вместо arp команда, думаю, заработает. (Я точно знаю, что это работает с одноранговым IP-адресом интерфейса точка-точка. Я не тестировал ту же настройку с записью в таблице маршрутизации, отправляющей трафик через туннельный интерфейс, и я не знаю с уверенностью требуются ли для этого дополнительные шаги.)

Если ISP, размещающий Сервер B, фильтрует трафик на основе IP-адреса источника, вы не сможете отправлять пакеты оттуда, используя 137.74.9.193 как исходный адрес. Если вы пингуете 137.74.9.193 извне и захватывать пакеты ICMP на eth0 на сервере B вы должны увидеть, отправляются ли эхо-ответы ICMP через этот интерфейс.

Если вы обнаружите, что сервер B отправляет эхо-ответы ICMP, и они никогда не достигают своего пункта назначения, наиболее вероятным объяснением является то, что поставщик услуг Интернета выполняет фильтрацию на основе IP-адреса источника.

В этом случае у вас есть два варианта. Вы можете связаться с интернет-провайдером и объяснить, что вам нужно отправлять пакеты с этим исходным IP-адресом, чтобы они могли обновить свой фильтр. Или вы можете туннелировать обратный трафик через Сервер А.

Самый простой способ туннелировать обратный трафик через A - создать таблицу маршрутизации на B, которая выглядит следующим образом:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         *               0.0.0.0         UG    0      0        0 tun1
213.32.69.16    gateway         255.255.255.255 UG    0      0        0 eth0
10.0.0.1        *               255.255.255.255 UH    0      0        0 tun1
10.19.0.0       *               255.255.0.0     U     0      0        0 eth0
139.59.128.0    *               255.255.240.0   U     0      0        0 eth0

Однако это сделает 139.59.131.76 недоступен из остального Интернета. Если вы хотите, чтобы B был доступен через оба IP-адреса одновременно, вам необходимо создать два разных маршрута по умолчанию и политику маршрутизации, чтобы выбирать между ними на основе IP-адреса источника пакета.