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