Я установил балансировщик нагрузки с ldirectord и управляемую им активно-пассивную службу mysql на двух дополнительных реальных серверах.
LVS работает в режиме прямой маршрутизации, поэтому клиентские запросы направляются непосредственно на активный в данный момент реальный сервер.
Реальный ip сервера: 192.168.3.41
Виртуальный ip: 192.168.3.100
IP клиента (моя рабочая станция): 192.168.100.117
Я также настроил туннель OpenVPN P-t-P между шлюзом локального офиса и балансировщиком нагрузки для удаленного управления хостами.
IP-адрес балансировщика нагрузки VPN: 172.16.3.1
IP-адрес конечной точки VPN на стороне клиента: 172.16.3.2
Это проблема: если я попытаюсь подключиться к mysql с использованием реального IP-адреса, все будет работать нормально, но мне нужно иметь возможность подключиться также с использованием виртуального IP-адреса, а это не сработает.
Провел некоторое устранение неполадок сети, и кажется, что при вызове виртуального IP-адреса возвращаемые пакеты не маршрутизируются в туннель vpn, реальный сервер отвечает правильно, но поток пакетов останавливается при возвращении к балансировщику нагрузки.
Запуск NetCat на клиенте, который прослушивает любой порт, и пытается подключиться с реального сервера, используя его реальный IP-адрес в качестве исходного IP-адреса, но не использует виртуальный IP-адрес в качестве источника.
Кроме того, если я попытаюсь подключиться к службе (lighttpd на порту 80), запущенной на самом балансировщике нагрузки, используя тот же виртуальный IP-адрес, он работает!
По этой причине я подозреваю что-то связанное с ldirectord, но не могу понять, что именно!
Итак, подведем итоги:
Клиент вызывает 192.168.3.41 на порт 3306: рабочий.
Клиент вызывает 192.168.3.100 на порт 80 (локальный lighttpd на балансировщике нагрузки): работает.
Клиент вызывает 192.168.3.100 на порт 3306: НЕ работает, пакеты возвращаются в подсистему балансировки нагрузки с реального сервера и не направляются в vpn.
Это мои конфигурации балансировщика нагрузки:
ПЕРЕДНЯЯ ЦЕПЬ:
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
95M 68G ACCEPT all -- * * 192.168.3.0/24 0.0.0.0/0
58M 8719M ACCEPT all -- tun+ * 0.0.0.0/0 0.0.0.0/0
17M 16G ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
ЦЕПЬ РАЗМЕЩЕНИЯ:
Chain POSTROUTING (policy ACCEPT 1377K packets, 84M bytes)
pkts bytes target prot opt in out source destination
862K 51M MASQUERADE all -- * * 192.168.3.0/24 0.0.0.0/0
101K 6159K MASQUERADE all -- * bond1 172.16.3.0/24 0.0.0.0/0
BOND 1 Интерфейс:
# ifconfig bond1
bond1 Link encap:Ethernet HWaddr 00:22:19:d5:6d:da
inet addr:192.168.3.11 Bcast:192.168.3.255 Mask:255.255.255.0
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:28854406358 errors:0 dropped:356 overruns:0 frame:0
TX packets:27339806726 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:11071114840327 (10.0 TiB) TX bytes:6071397046829 (5.5 TiB)
TUN 0 Интерфейс:
# ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:172.16.3.1 P-t-P:172.16.3.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:6047779884 errors:0 dropped:0 overruns:0 frame:0
TX packets:7219390246 errors:0 dropped:3234101 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:1060763811007 (987.9 GiB) TX bytes:5651690621029 (5.1 TiB)
Таблица маршрутизации:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.3.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
192.168.100.0 172.16.3.2 255.255.255.0 UG 0 0 0 tun0
192.168.3.0 0.0.0.0 255.255.255.0 U 0 0 0 bond1
172.16.3.0 172.16.3.2 255.255.255.0 UG 0 0 0 tun0
0.0.0.0 xxx.xxx.xxx.xxx 0.0.0.0 UG 0 0 0 bond0
Параметры ядра:
# sysctl -a|grep forw
net.ipv4.conf.all.forwarding = 1
net.ipv4.conf.all.mc_forwarding = 0
net.ipv4.conf.default.forwarding = 1
net.ipv4.conf.default.mc_forwarding = 0
net.ipv4.conf.lo.forwarding = 1
net.ipv4.conf.lo.mc_forwarding = 0
net.ipv4.conf.eth0.forwarding = 1
net.ipv4.conf.eth0.mc_forwarding = 0
net.ipv4.conf.eth1.forwarding = 1
net.ipv4.conf.eth1.mc_forwarding = 0
net.ipv4.conf.eth2.forwarding = 1
net.ipv4.conf.eth2.mc_forwarding = 0
net.ipv4.conf.eth3.forwarding = 1
net.ipv4.conf.eth3.mc_forwarding = 0
net.ipv4.conf.bond0.forwarding = 1
net.ipv4.conf.bond0.mc_forwarding = 0
net.ipv4.conf.bond1.forwarding = 1
net.ipv4.conf.bond1.mc_forwarding = 0
net.ipv4.conf.bond2.forwarding = 1
net.ipv4.conf.bond2.mc_forwarding = 0
net.ipv4.conf.tun0.forwarding = 1
net.ipv4.conf.tun0.mc_forwarding = 0
net.ipv4.ip_forward = 1
# sysctl -a|grep arp
net.ipv4.conf.all.proxy_arp = 0
net.ipv4.conf.all.arp_filter = 0
net.ipv4.conf.all.arp_announce = 0
net.ipv4.conf.all.arp_ignore = 0
net.ipv4.conf.all.arp_accept = 0
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.default.arp_filter = 0
net.ipv4.conf.default.arp_announce = 0
net.ipv4.conf.default.arp_ignore = 0
net.ipv4.conf.default.arp_accept = 0
net.ipv4.conf.lo.proxy_arp = 0
net.ipv4.conf.lo.arp_filter = 0
net.ipv4.conf.lo.arp_announce = 0
net.ipv4.conf.lo.arp_ignore = 0
net.ipv4.conf.lo.arp_accept = 0
net.ipv4.conf.eth0.proxy_arp = 0
net.ipv4.conf.eth0.arp_filter = 0
net.ipv4.conf.eth0.arp_announce = 0
net.ipv4.conf.eth0.arp_ignore = 0
net.ipv4.conf.eth0.arp_accept = 0
net.ipv4.conf.eth1.proxy_arp = 0
net.ipv4.conf.eth1.arp_filter = 0
net.ipv4.conf.eth1.arp_announce = 0
net.ipv4.conf.eth1.arp_ignore = 0
net.ipv4.conf.eth1.arp_accept = 0
net.ipv4.conf.eth2.proxy_arp = 0
net.ipv4.conf.eth2.arp_filter = 0
net.ipv4.conf.eth2.arp_announce = 0
net.ipv4.conf.eth2.arp_ignore = 0
net.ipv4.conf.eth2.arp_accept = 0
net.ipv4.conf.eth3.proxy_arp = 0
net.ipv4.conf.eth3.arp_filter = 0
net.ipv4.conf.eth3.arp_announce = 0
net.ipv4.conf.eth3.arp_ignore = 0
net.ipv4.conf.eth3.arp_accept = 0
net.ipv4.conf.bond0.proxy_arp = 0
net.ipv4.conf.bond0.arp_filter = 0
net.ipv4.conf.bond0.arp_announce = 0
net.ipv4.conf.bond0.arp_ignore = 0
net.ipv4.conf.bond0.arp_accept = 0
net.ipv4.conf.bond1.proxy_arp = 0
net.ipv4.conf.bond1.arp_filter = 0
net.ipv4.conf.bond1.arp_announce = 0
net.ipv4.conf.bond1.arp_ignore = 0
net.ipv4.conf.bond1.arp_accept = 0
net.ipv4.conf.bond2.proxy_arp = 0
net.ipv4.conf.bond2.arp_filter = 0
net.ipv4.conf.bond2.arp_announce = 0
net.ipv4.conf.bond2.arp_ignore = 0
net.ipv4.conf.bond2.arp_accept = 0
net.ipv4.conf.tun0.proxy_arp = 0
net.ipv4.conf.tun0.arp_filter = 0
net.ipv4.conf.tun0.arp_announce = 0
net.ipv4.conf.tun0.arp_ignore = 0
net.ipv4.conf.tun0.arp_accept = 0
заранее спасибо за помощь мне.