Это продолжение этот вопрос обо мне. (Все еще на Debian 7.8)
Проблема на самом деле не связана с IPSec или чем-то еще, потому что я даже не могу проверить связь с удаленным хостом с «правильным» исходным IP (через ping -I eth1: ipsec).
Вот необходимая информация:
inet xxx.xxx.xxx.94/24 brd xxx.xxx.xxx.255 scope global eth1
inet xxx.xxx.xxx.92/29 brd xxx.xxx.xxx.95 scope global secondary eth1:ipsec
Я хочу, чтобы в моих подключениях использовался gw по умолчанию и стандартный IP-адрес eth1: .94, но одно соединение с удаленным хостом использовало eth1: ipsec: .92.
Я считаю, что это проблема маршрутизации, поэтому я добавил таблицу правил маршрутизации:
0: from all lookup local
2: from all to xxx.xxx.xxx.21 lookup 17
32766: from all lookup main
32767: from all lookup default
и 17 имеет:
xxx.xxx.xxx.21 via xxx.xxx.xxx.91 dev eth1 src xxx.xxx.xxx.92
Но даже сейчас, если я пингую, пакеты получат исходный IP-адрес .94 (даже с ping -I eth1: ipsec или -I xxx.xxx.xxx.92):
xxx.xxx.xxx.94 > xxx.xxx.xxx.21: ICMP echo request, id 20865, seq 9, length 64
IP xxx.xxx.xxx.21 > xxx.xxx.xxx.94: ICMP echo reply, id 20865, seq 9, length 64
Также SNAT-передача пакетов через iptables ничего не делает, по-прежнему неправильный IP-адрес источника.
... Я здесь совершенно потерялся.
После нескольких болезненных дней отладки, маршрутизации и таблиц маршрутизации и кипящей головы я отказался и перенастроил всех клиентов IPSec, находящихся под моим непосредственным контролем, на использование IP-адреса .92, и теперь все работает, как ожидалось.
Я все еще не понимаю, почему я не могу выполнить sourceroute или SNAT пакеты ... время для серьезного тестирования в моей тестовой среде (я подозреваю какую-то сумасшедшую несовместимость между IP-псевдонимом, кардиостимулятором и таблицами маршрутизации или чем-то в этом роде, или просто глупость).