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

Как использовать IP-адреса удаленного Linux-сервера в качестве дополнительных IP-адресов моего текущего Linux-сервера?

У меня есть 2 сервера Linux «X» и «Y».

Сервер X имеет много ресурсов, но 2 общедоступных IP-адреса (1 основной IP привязан как eth0 и 1 дополнительный IP привязан как eth0: 0).

Сервер Y имеет 9 общедоступных IP-адресов (1 основной IP-адрес, связанный как eth0, и 8 дополнительных IP-адресов, привязанный как eth0: 0 к eth0: 7), но ограниченное количество ресурсов.

Я хочу использовать дополнительные IP-адреса сервера Y (8 IP-адресов) на сервере X, чтобы на сервере X было всего 10 IP-адресов.

Я погуглил, и я думаю, что это можно сделать с помощью туннелей IPIP / GRE, которые я пытался несколько дней, но пока безуспешно.

Вот что я делал на обоих серверах:

Сервер X

sysctl -w net.ipv4.conf.default.rp_filter=0;
ip tunnel add tunx mode gre remote |Y's Main IP| local |X's Main IP| ttl 255 dev eth0;
ip link set tunx up;
ip addr add 10.10.1.1/32 dev tunx peer 10.10.1.2;
ip addr add |One of Y's Additional IPs|/29 dev eth0;

Сервер Y

sysctl -w net.ipv4.conf.all.forwarding=1;
sysctl -w net.ipv4.ip_forward=1;
sysctl -w net.ipv4.conf.all.proxy_arp=1;
sysctl -w net.ipv4.conf.eth0.rp_filter=0;
sysctl -w net.ipv4.conf.tun0.rp_filter=0;
ip tunnel add tuny mode gre remote |X's Main IP| local |Y's Main IP| ttl 255 dev eth0;
ip link set tuny up;
ip addr add 10.10.1.2/32 dev tuny;
ip route add |Y's first additional IP|/29 via 10.10.1.2;

После вышеуказанных команд на обоих серверах, когда я пытаюсь выполнить следующую команду из X:

traceroute -s|One of Y's additional IPs| google.com

I get this:

traceroute to google.com (173.194.70.113), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *

В вашей настройке есть как минимум две ошибки:

  1. ServerX нужны правила маршрутизации для пересылки трафика от Y1 в туннель.
  2. Tuny на ServerY нужен одноранговый адрес.

Также используйте / 32 маршруты и маски для перенесенных адресов, чтобы предотвратить петли маршрутизации.

Позволять:

  1. ServerX основной IP = X
  2. ServerY основной IP = Y
  3. ServerY дополнительный IP = Y1

Тогда, как мне кажется, ближе к рабочему конфигу:

ServerX:

...
ip tunnel add tun0 mode gre remote Y local X ttl 255
ip link   set tun0 up

ip addr add Y1/32 dev eth0
ip addr add 10.10.1.1 dev tun0 peer 10.10.1.2

ip route  add default via 10.10.1.2 dev tun0 table 100
ip rule   add from  Y1 table 100

ServerY

ip tunnel add tun0 mode gre remote X local Y ttl 255
ip link   set tun0 up

ip addr add 10.10.1.2 dev tun0 peer 10.10.1.1

ip route add Y1/32 via 10.10.1.1 dev tun0

Вы также можете рассмотреть альтернативную настройку с одним туннелем GRE и статическим NAT на ServerY, чтобы сделать IP-адреса на ServerY доступными для служб на ServerX.

UPD:

Я только что это проверил. Кажется, это работает.

Соответствующая конфигурация iptables для разрешения потоков трафика:

СерверY:

-A FORWARD -d Y1 -o tun0 -j ACCEPT
-A FORWARD -s Y1 -i tun0 -j ACCEPT
-A INPUT -p gre -j ACCEPT

ServerX:

-A INPUT -p gre -j ACCEPT

Проблемы можно отладить в следующем порядке:

  1. Убедитесь, что X и Y достижимы.
  2. Убедитесь, что туннель открыт и работает: ping <tunnel-peer-address>.
  3. Если нет, проверьте, разрешают ли провайдеры трафик GRE.
  4. Отслеживайте, как обрабатываются пакеты icmp: tcpdump -i tun0 icmp и tcpdump -i eth0 icmp.

Хорошая книга - "Linux Advanced Routing & Traffic Control HOWTO".

Почему бы просто не удалить конфигурацию IP-адресов с сервера Y и добавить их в конфигурацию сервера X (чтобы у вас был только один сервер с определенным IP-адресом)?