У меня настроен туннель GRE между двумя Linux-системами. Туннель работает нормально. Я могу пинговать с каждого хоста другой частный IP-адрес.
Главный приват: 10.0.0.1
publicip: 8.8.8.8
Приватный хвост: 10.0.0.2
publicip: 7.7.7.7
Общедоступный IP-адрес на Tail имеет сетевой блок 9.9.9.0/23, статически маршрутизируемый через интерфейс 7.7.7.7. Идея состоит в том, чтобы заставить 9.9.9.0/23 ips работать на серверах в сети 8.8.8.8.
Я настраиваю хвостовой хост для маршрутизации блока / 23. Я установил 9.9 IP на головном сервере. Могу пинговать 9.9 ip от хвоста до головы.
Я не могу пропинговать ip 9.9 из общедоступного интернета.
Я думаю, что мне нужно добавить некоторые другие маршруты из-за проблем со шлюзом, но я, кажется, не могу осознать это (не парень маршрутизатора, просто пробивая себе путь через то, что я никогда раньше не делал и смутно понимаю)
- данки
Уже немного поздно, но если вы не решили это, вот как:
Учитывая ваш пример, просто замените:
Общедоступные IP-адреса:
туннелирование с gre:
На:
# adding the interface for the tunnel
$ ip tunnel add tun2 mode gre remote 70.2.2.3 ttl 64
# setting the private ip address
$ ifconfig tun2 10.0.201.1/24
$ ifconfig tun2 up
# A point to point
$ ifconfig tun2 pointopoint 10.0.201.2
# enabling multicast (it's not necessary for this)
$ ifconfig tun2 multicast
$ ifconfig tun2 arp
$ ifconfig tun2 broadcast
# default route for the tunnel
$ ip route add 10.0.201.2 dev tun2
# enable ip forward
$ echo 1 > /proc/sys/net/ipv4/ip_forward
# add the permanent entries to the arp table in order to get the complete loop. (without this doesn't work)
# replace the public ips for your ips, and the mac for your real mac for your interface
# the word pub it's the most important here, if it's not there the arps will never go outside
$ arp -s 50.2.2.20 00:00:00:00:00:00 -i eth0 pub
$ arp -s 50.2.2.21 00:00:00:00:00:00 -i eth0 pub
$ arp -s 50.2.2.22 00:00:00:00:00:00 -i eth0 pub
На B:
# adding the interface for the tunnel
$ ip tunnel add tun2 mode gre remote 50.2.2.2 ttl 64
# setting the private ip address
$ ifconfig tun2 10.0.201.2/24
$ ifconfig tun2 up
# point to point B
$ ifconfig tun2 pointopoint 10.0.201.1
# enabling multicast (it's not necessary for this)
$ ifconfig tun2 multicast
$ ifconfig tun2 arp
$ ifconfig tun2 broadcast
# default route for the tunnel
$ ip route add 10.0.201.1 dev tun2
$ echo 1 > /proc/sys/net/ipv4/ip_forward
# putting the ips to listen in the eth0 as secondary ips
$ ip ad add 50.2.2.20/32 dev eth0
$ ip ad add 50.2.2.21/32 dev eth0
$ ip ad add 50.2.2.22/32 dev eth0
И все, у вас должен быть полностью функциональный туннель и возможность маршрутизировать IP-адреса, которые находятся далеко от того места, где вы хотите их использовать, так что теперь вы можете начать привязывать некоторых демонов к этим IP-адресам.
Еще нужно иметь в виду, что если у вас так много IP-адресов, вы должны быть осторожны с вашим широковещательным доменом в точке A, и если вы планируете туннелировать более 500 IP-адресов, вам нужно изменить значение по умолчанию. значения Linux для таблицы arp, чтобы сохранить все записи:
$ echo 1024 > /proc/sys/net/ipv4/neigh/default/gc_thresh1
$ echo 4096 > /proc/sys/net/ipv4/neigh/default/gc_thresh2
$ echo 16384 > /proc/sys/net/ipv4/neigh/default/gc_thresh3
Источники:
Давно искал то же самое и нашел ваш пост.
Маршруты должны существовать в обоих направлениях на всем протяжении пути. Из вашего описания я не совсем уверен, что именно не работает.