Bug 15193

Summary: bad gateway in multihomed system when connection is established
Product: Branch 4.0 Reporter: Alexander Volkov <vaa>
Component: openvpnAssignee: Nikolay A. Fetisov <naf>
Status: CLOSED NOTABUG QA Contact: Q.A. 4.0 <qa-4.0>
Severity: normal    
Priority: P2    
Version: 4.0   
Hardware: all   
OS: Linux   

Description Alexander Volkov 2008-04-01 12:38:38 MSD
Сервер с двумя каналами в мир.
ip r
79.143.19.64/29 dev port33  proto kernel  scope link  src 79.143.19.66
192.168.10.0/29 dev lan  proto kernel  scope link  src 192.168.10.1
172.18.20.32/28 via 192.168.1.1 dev adsl
192.168.20.0/25 dev port33  proto kernel  scope link  src 192.168.20.1
80.93.107.0/24 via 192.168.1.1 dev adsl
80.93.108.0/24 via 192.168.1.1 dev adsl
192.168.1.0/24 dev adsl  proto kernel  scope link  src 192.168.1.7
80.93.97.0/24 via 192.168.1.1 dev adsl
80.93.98.0/24 via 192.168.1.1 dev adsl
195.20.194.0/23 via 192.168.1.1 dev adsl
89.113.68.0/22 via 192.168.1.1 dev adsl
89.113.136.0/21 via 192.168.1.1 dev adsl
79.143.16.0/20 via 79.143.19.70 dev port33
85.249.80.0/20 via 192.168.1.1 dev adsl
89.113.192.0/20 via 192.168.1.1 dev adsl
82.196.128.0/19 via 192.168.1.1 dev adsl
212.34.96.0/19 via 192.168.1.1 dev adsl
84.53.192.0/18 via 192.168.1.1 dev adsl
default via 79.143.19.70 dev port33  src 79.143.19.66

Поднимаем openvpn до хоста 84.53.199.236, имеем после коннекта:
ip r
84.53.199.236 via 79.143.19.70 dev port33
10.8.1.2 dev tun0  proto kernel  scope link  src 10.8.1.1
192.168.2.144/30 via 10.8.1.2 dev tun0
79.143.19.64/29 dev port33  proto kernel  scope link  src 79.143.19.66
192.168.10.0/29 dev lan  proto kernel  scope link  src 192.168.10.1
172.18.20.32/28 via 192.168.1.1 dev adsl
192.168.20.0/25 dev port33  proto kernel  scope link  src 192.168.20.1
192.168.2.0/25 via 10.8.1.2 dev tun0
80.93.107.0/24 via 192.168.1.1 dev adsl
80.93.108.0/24 via 192.168.1.1 dev adsl
10.8.0.0/24 via 10.8.1.2 dev tun0
192.168.1.0/24 dev adsl  proto kernel  scope link  src 192.168.1.7
80.93.97.0/24 via 192.168.1.1 dev adsl
80.93.98.0/24 via 192.168.1.1 dev adsl
195.20.194.0/23 via 192.168.1.1 dev adsl
89.113.68.0/22 via 192.168.1.1 dev adsl
89.113.136.0/21 via 192.168.1.1 dev adsl
79.143.16.0/20 via 79.143.19.70 dev port33
85.249.80.0/20 via 192.168.1.1 dev adsl
89.113.192.0/20 via 192.168.1.1 dev adsl
82.196.128.0/19 via 192.168.1.1 dev adsl
212.34.96.0/19 via 192.168.1.1 dev adsl
84.53.192.0/18 via 192.168.1.1 dev adsl
0.0.0.0/1 via 10.8.1.2 dev tun0
128.0.0.0/1 via 10.8.1.2 dev tun0
default via 79.143.19.70 dev port33  src 79.143.19.66

т.е, маршрут до vpn сервера устанавливается не по тому каналу.
Comment 1 Nikolay A. Fetisov 2008-04-01 16:15:37 MSD
Согласно openvpn(8), при наличии директивы 'redirect-gateway "def1"' после 
создания туннеля OpenVPN
"
- Create a static route for the --remote address which forwards to the 
pre-existing default gateway." 

Т.е., маршрут до сервера создаётся через текущий маршрут по-умолчанию.
В данной конфигурации маршрут по-умолчанию -
"default via 79.143.19.70 dev port33  src 79.143.19.66"
 
Соответственно, создаваемый маршрут до сервера - 
"84.53.199.236 via 79.143.19.70 dev port33"

Если требуется другое, нетривиальное поведение (как в данном случае), можно 
создавать нужные маршруты из скриптов --up или --route-up.

См. также 
http://lists.altlinux.org/pipermail/sysadmins/2008-March/014368.html
Comment 2 Alexander Volkov 2008-04-01 17:05:56 MSD
мда, это таки документированная бага апстрима...
Спасибо за разъяснение.
Comment 3 Alexander Volkov 2008-04-02 09:56:09 MSD
(In reply to comment #1)
> Согласно openvpn(8), при наличии директивы 'redirect-gateway "def1"' после 
> создания туннеля OpenVPN
> "
> - Create a static route for the --remote address which forwards to the 
> pre-existing default gateway." 
> 
> Если требуется другое, нетривиальное поведение (как в данном случае), можно 
> создавать нужные маршруты из скриптов --up или --route-up.
> 
дочитал указанный man:
Add the local flag if both OpenVPN servers are directly  connected  via  a  
common  subnet, such as with wireless.  The local flag will cause step 1 above 
to be omittеd.

Вот что надо в моем случае! Ибо сервер локально доступен по любому из 2=х 
интерфейсов.