У меня есть 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), но ограниченное количество ресурсов.
Я погуглил, и я думаю, что это можно сделать с помощью туннелей 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 * * *
В вашей настройке есть как минимум две ошибки:
Также используйте / 32 маршруты и маски для перенесенных адресов, чтобы предотвратить петли маршрутизации.
Позволять:
Тогда, как мне кажется, ближе к рабочему конфигу:
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
Проблемы можно отладить в следующем порядке:
ping <tunnel-peer-address>
.tcpdump -i tun0 icmp
и tcpdump -i eth0 icmp
.Хорошая книга - "Linux Advanced Routing & Traffic Control HOWTO".
Почему бы просто не удалить конфигурацию IP-адресов с сервера Y и добавить их в конфигурацию сервера X (чтобы у вас был только один сервер с определенным IP-адресом)?