URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 90234
[ Назад ]

Исходное сообщение
"2 провайдера + DNAT"

Отправлено KobaLTD , 08-Ноя-10 13:43 
Есть cервак (ubuntu 10.04) на него заведены 2 канала (VPN подключение)
схема
пров 1 <------>|
               |    20mbit/s
               |<---------> (ppp0)
                    5mbit/s      ubuntu (br0)<------------>оффтопик
               |<---------> (ppp1)
               |
пров 2 <------>|

задача: 1.сделать доступ на убунту одновременно с двух прово (решена)
        2.выводить софтопика через 2 провов с балансировкой (решена)
        3.переключение на оставшевогося в случаи падения другово (решена)
        4.прокинуть внуть сервисы до оффтпика(в часности VPN (pptp)) (решена частично)

Вопрос по 4 пункту - сервисы вроде прокинул но есть 1 небольшое но - когда подняты оба вровайдера - подсоединяюсь через ip первого провайдера и смотрю через tcpdump -i ppp0 -n proto GRE все в поорядке вижу прием и ответ через этот интерфейс все пакеты нормально отрабатывают SNAT + DNAT. а вот когда подсоединясь через другово провайдера (соединение устанавливаеться и работает) то в ходящие вижу на PPP1 а исходящие вижу только на PPP0 но с DNAT от воторого провайдера. Не пойму где "косяк"

server:~# ip route list
172.30.96.1 dev ppp1  proto kernel  scope link  src b.b.b.b
85.21.0.212 via 10.207.32.1 dev vlan2  src 10.207.38.55 //vpn сервер первого прова
192.168.237.2 dev vlan3  scope link  src 192.168.237.110 //vnp сервер второго прова
192.168.69.0/24 dev br0  proto kernel  scope link  src 192.168.69.1 //локальная сетка
192.168.237.0/24 dev vlan3  proto kernel  scope link  src 192.168.237.110 //сетка второго прова
10.207.32.0/21 dev vlan2  proto kernel  scope link  src 10.207.38.55 //локалка моего сегмента первого прова
10.0.0.0/8 via 10.207.32.1 dev vlan2 // маршрут до все локалки первого прова
default
        nexthop dev ppp0 weight 8 // первый пров
        nexthop dev ppp1 weight 2 // второй пров

server:~# ip rule list
0:      from all lookup local
101:    from all fwmark 0x1 lookup corbinawan //первый пров
201:    from all fwmark 0x2 lookup 2komwan  //второй пров
32766:  from all lookup main
32767:  from all lookup default

server:~# ip route list table corbinawan
192.168.69.0/24 dev br0  scope link
127.0.0.0/8 dev lo  scope link
default dev ppp0  scope link

server:~# ip route list table 2komwan
192.168.69.0/24 dev br0  scope link
127.0.0.0/8 dev lo  scope link
default dev ppp1  scope link


(показываю только то что относиться к данному воросу)
server:~# iptables-save
# Generated by iptables-save v1.4.4 on Mon Nov  8 13:13:38 2010
*filter
:INPUT DROP [2370094:134130146]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [273336903:395120712083]
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i br0 -o br0 -j ACCEPT
-A FORWARD -s 192.168.69.0/24 -i br0 -j ACCEPT
-A FORWARD -d 192.168.69.2/32 -i ppp+ -p tcp -m tcp --dport 1723 -j ACCEPT
COMMIT
# Completed on Mon Nov  8 13:13:38 2010
# Generated by iptables-save v1.4.4 on Mon Nov  8 13:13:38 2010
*nat
:PREROUTING ACCEPT [1923691:174890958]
:POSTROUTING ACCEPT [1116756:98145832]
:OUTPUT ACCEPT [1104886:97539420]
-A PREROUTING -i ppp+ -p tcp -m tcp --dport 1723 -j DNAT --to-destination 192.168.69.2:1723
-A POSTROUTING -s 192.168.69.0/24 -m connmark --mark 0x1 -j SNAT --to-source a.a.a.a
-A POSTROUTING -s 192.168.69.0/24 -m connmark --mark 0x2 -j SNAT --to-source b.b.b.b
COMMIT
# Completed on Mon Nov  8 13:13:38 2010
# Generated by iptables-save v1.4.4 on Mon Nov  8 13:13:38 2010
*mangle
:PREROUTING ACCEPT [235052702:15306323952]
:INPUT ACCEPT [233638986:14683333737]
:FORWARD ACCEPT [1324505:613850394]
:OUTPUT ACCEPT [141030691:179282896874]
:POSTROUTING ACCEPT [274668639:395735869774]
-A INPUT -i br+ -j CONNMARK --set-xmark 0x8/0xffffffff
-A INPUT -i ppp1 -j CONNMARK --set-xmark 0x2/0xffffffff
-A INPUT -i ppp0 -j CONNMARK --set-xmark 0x1/0xffffffff
-A FORWARD -i br+ -j CONNMARK --set-xmark 0x8/0xffffffff
-A FORWARD -o ppp1 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -i ppp1 -j CONNMARK --set-xmark 0x2/0xffffffff
-A FORWARD -o ppp1 -j CONNMARK --set-xmark 0x2/0xffffffff
-A FORWARD -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -i ppp0 -j CONNMARK --set-xmark 0x1/0xffffffff
-A FORWARD -o ppp0 -j CONNMARK --set-xmark 0x1/0xffffffff
-A OUTPUT -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
-A OUTPUT -m mark ! --mark 0x0 -j ACCEPT
COMMIT
# Completed on Mon Nov  8 13:13:38 2010

Вот собственно настройки. Если надо что то есчо скажите
conntrack -F и ip route flush cache
соответственно делал всегда при всех изменениях (на всякий случай)

server:~# tcpdump -i ppp0 -n proto GRE
13:07:49.597966 IP b.b.b.b > 89.175.163.34: GREv1, call 59501, seq 75, ack 126, length 93: compressed PPP data
13:08:26.428499 IP b.b.b.b > 89.175.163.34: GREv1, call 59501, seq 76, ack 127, length 139: compressed PPP data
13:11:08.429503 IP b.b.b.b > 89.175.163.34: GREv1, call 59501, seq 77, length 92: compressed PPP data
13:11:16.619174 IP b.b.b.b > 89.175.163.34: GREv1, call 59501, seq 78, length 93: compressed PPP data
13:11:34.160969 IP b.b.b.b > 89.175.163.34: GREv1, call 59501, seq 79, ack 130, length 96: compressed PPP data
13:12:49.965872 IP b.b.b.b > 89.175.163.34: GREv1, call 59501, seq 80, length 255: compressed PPP data
13:16:34.217800 IP b.b.b.b > 89.175.163.34: GREv1, call 59501, seq 81, ack 132, length 96: compressed PPP data
13:17:49.750657 IP b.b.b.b > 89.175.163.34: GREv1, call 59501, seq 82, ack 133, length 93: compressed PPP data

server:~# tcpdump -i ppp1 -n proto GRE
13:07:49.706731 IP 89.175.163.34 > b.b.b.b: GREv1, call 12543, ack 75, no-payload, length 12
13:08:26.426685 IP 89.175.163.34 > b.b.b.b: GREv1, call 12543, seq 127, length 81: compressed PPP data
13:08:26.539533 IP 89.175.163.34 > b.b.b.b: GREv1, call 12543, ack 76, no-payload, length 12
13:11:08.246677 IP 89.175.163.34 > b.b.b.b: GREv1, call 12543, seq 128, length 76: compressed PPP data
13:11:08.539201 IP 89.175.163.34 > b.b.b.b: GREv1, call 12543, ack 77, no-payload, length 12
13:11:16.466689 IP 89.175.163.34 > b.b.b.b: GREv1, call 12543, seq 129, length 77: compressed PPP data
13:11:16.726682 IP 89.175.163.34 > b.b.b.b: GREv1, call 12543, ack 78, no-payload, length 12
13:11:34.149186 IP 89.175.163.34 > b.b.b.b: GREv1, call 12543, seq 130, length 76: compressed PPP data
13:11:34.276675 IP 89.175.163.34 > b.b.b.b: GREv1, call 12543, ack 79, no-payload, length 12
13:12:50.076693 IP 89.175.163.34 > b.b.b.b: GREv1, call 12543, ack 80, no-payload, length 12
13:14:30.296713 IP 89.175.163.34 > b.b.b.b: GREv1, call 12543, seq 131, length 246: compressed PPP data
13:16:34.216684 IP 89.175.163.34 > b.b.b.b: GREv1, call 12543, seq 132, length 76: compressed PPP data
13:16:34.326675 IP 89.175.163.34 > b.b.b.b: GREv1, call 12543, ack 81, no-payload, length 12
13:17:49.729183 IP 89.175.163.34 > b.b.b.b: GREv1, call 12543, seq 133, length 73: compressed PPP data
13:17:49.866697 IP 89.175.163.34 > b.b.b.b: GREv1, call 12543, ack 82, no-payload, length 12
13:20:07.826683 IP 89.175.163.34 > b.b.b.b: GREv1, call 12543, ack 83, no-payload, length 12


server:~# ifconfig
br0       Link encap:Ethernet  HWaddr 00:30:48:bd:43:d8
          inet addr:192.168.69.1  Bcast:192.168.69.255  Mask:255.255.255.0
          inet6 addr: fe80::230:48ff:febd:43d8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:16514711 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6141861 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1058389865 (1.0 GB)  TX bytes:42743605901 (42.7 GB)

eth0      Link encap:Ethernet  HWaddr 00:30:48:bd:43:d8
          inet6 addr: fe80::230:48ff:febd:43d8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:16140787 errors:0 dropped:0 overruns:0 frame:0
          TX packets:29406798 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1102470743 (1.1 GB)  TX bytes:44061884788 (44.0 GB)
          Память:dc300000-dc320000

eth1      Link encap:Ethernet  HWaddr 00:30:48:bd:43:d9
          inet6 addr: fe80::230:48ff:febd:43d9/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:147938762 errors:0 dropped:0 overruns:0 frame:0
          TX packets:140445207 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:12600441207 (12.6 GB)  TX bytes:182010993443 (182.0 GB)
          Память:dc400000-dc420000

lo        Link encap:Локальная петля (Loopback)
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:118864 errors:0 dropped:0 overruns:0 frame:0
          TX packets:118864 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:194035535 (194.0 MB)  TX bytes:194035535 (194.0 MB)

ppp0      Link encap:Протокол PPP (Point-to-Point Protocol)
          inet addr:a.a.a.a  P-t-P:85.21.0.212  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1460  Metric:1
          RX packets:631334 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1219734 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:39199270 (39.1 MB)  TX bytes:1601858465 (1.6 GB)

ppp1      Link encap:Протокол PPP (Point-to-Point Protocol)
          inet addr:b.b.b.b  P-t-P:172.30.96.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1460  Metric:1
          RX packets:3483158 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5474895 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:235049968 (235.0 MB)  TX bytes:7313876184 (7.3 GB)

vlan2     Link encap:Ethernet  HWaddr 00:30:48:bd:43:d9
          inet addr:10.207.38.55  Bcast:10.207.39.255  Mask:255.255.248.0
          inet6 addr: fe80::230:48ff:febd:43d9/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:47878435 errors:0 dropped:0 overruns:0 frame:0
          TX packets:73485713 errors:0 dropped:4 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:4837514983 (4.8 GB)  TX bytes:101674251367 (101.6 GB)

vlan3     Link encap:Ethernet  HWaddr 00:30:48:bd:43:d9
          inet addr:192.168.237.110  Bcast:192.168.237.255  Mask:255.255.255.0
          inet6 addr: fe80::230:48ff:febd:43d9/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:100060327 errors:0 dropped:0 overruns:0 frame:0
          TX packets:66959488 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:5691783556 (5.6 GB)  TX bytes:80336741608 (80.3 GB)

a.a.a.a - мой реальный ip от первого прова
d.d.d.d - мой реальный ip от второго прова
vlan2 - смотрит в первого прова
vlan3 - смотрит во второго прова

причем замечего - что если сделать подключение vpn через второго прова, потом положить первого прова и поднять - то весь GRE начитает ходить как положено через второго прова - прям мистика какая то. :(
Подскажите чего-нить - думаю что гдето косяк в настройках - но никак не могу найти где.


Содержание

Сообщения в этом обсуждении
"2 провайдера + DNAT"
Отправлено reader , 08-Ноя-10 14:43 
попробуйте пробрасывать с разных ppp на разные ip или порты, а не все на 192.168.69.2:1723.
и потом маркировать ответные пакеты на основании того от куда они идут.

"2 провайдера + DNAT"
Отправлено KobaLTD , 08-Ноя-10 17:50 
> попробуйте пробрасывать с разных ppp на разные ip или порты, а не
> все на 192.168.69.2:1723.
> и потом маркировать ответные пакеты на основании того от куда они идут.

так работает - но у меня 1 vpn сервак - мутить алиасы на нем не хочеться - да и не правельно. должно работать но не работает сволоч - вернее работает - но както странно.


"2 провайдера + DNAT"
Отправлено reader , 08-Ноя-10 21:07 
>> попробуйте пробрасывать с разных ppp на разные ip или порты, а не
>> все на 192.168.69.2:1723.
>> и потом маркировать ответные пакеты на основании того от куда они идут.
> так работает - но у меня 1 vpn сервак - мутить алиасы
> на нем не хочеться - да и не правельно. должно работать
> но не работает сволоч - вернее работает - но както странно.

да, вариант не красивый, то что предложил ALex_hha лучше.

по поводу "должно работать", помоему прикол в том что ответные пакеты маркируются не там где задумывалось.


"2 провайдера + DNAT"
Отправлено ALex_hha , 08-Ноя-10 15:30 
На днях решал такую же проблему, пробрасывал запросы на внутр http сервер.

# iptables -t mangle -L PREROUTING -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
MARK       all  --  192.168.127.10       0.0.0.0/0           ctorigdst xxx.xxx.xxx.xxx MARK set 0xbc3
MARK       all  --  192.168.127.10       0.0.0.0/0           ctorigdst yyy.yyy.yyy.yyy MARK set 0x3e8

# iptables -t nat -L PREROUTING -n | grep :4321
DNAT       tcp  --  0.0.0.0/0            xxx.xxx.xxx.xxx      tcp dpt:4321 to:192.168.127.10:3389
DNAT       tcp  --  0.0.0.0/0            yyy.yyy.yyy.yyy      tcp dpt:4321 to:192.168.127.10:3389

# ip ru sh
0:      from all lookup local
2000:   from all fwmark 0xbc3 lookup IPS1
3000:   from all fwmark 0x3e8 lookup IPS2
32764:  from xxx.xxx.xxx.xxx lookup IPS1
32765:  from yyy.yyy.yyy.yyy lookup IPS2
32766:  from all lookup main
32767:  from all lookup default

# iptables -t mangle -I PREROUTING 1 -s 192.168.127.10 -m conntrack --ctorigdst yyy.yyy.yyy.yyy -j MARK --set-mark 1000

# iptables -t mangle -I PREROUTING 1 -s 192.168.127.10 -m conntrack --ctorigdst xxx.xxx.xxx.xxx -j MARK --set-mark 3011

По идее должно работать и с GRE


"2 провайдера + DNAT"
Отправлено PavelR , 08-Ноя-10 22:21 
>[оверквотинг удален]
> 3000:   from all fwmark 0x3e8 lookup IPS2
> 32764:  from xxx.xxx.xxx.xxx lookup IPS1
> 32765:  from yyy.yyy.yyy.yyy lookup IPS2
> 32766:  from all lookup main
> 32767:  from all lookup default
> # iptables -t mangle -I PREROUTING 1 -s 192.168.127.10 -m conntrack --ctorigdst
> yyy.yyy.yyy.yyy -j MARK --set-mark 1000
> # iptables -t mangle -I PREROUTING 1 -s 192.168.127.10 -m conntrack --ctorigdst
> xxx.xxx.xxx.xxx -j MARK --set-mark 3011
> По идее должно работать и с GRE

Как-то я ранее не обращал внимания ни на модуль iptables conntrack, ни на опцию ctorigdst... =)


"2 провайдера + DNAT"
Отправлено ALex_hha , 11-Ноя-10 00:26 
> Как-то я ранее не обращал внимания ни на модуль iptables conntrack, ни
> на опцию ctorigdst... =)

очень удобная вещь, и правила наглядные и логические получаются


"2 провайдера + DNAT"
Отправлено KobaLTD , 17-Ноя-10 18:13 
>> Как-то я ранее не обращал внимания ни на модуль iptables conntrack, ни
>> на опцию ctorigdst... =)
> очень удобная вещь, и правила наглядные и логические получаются

Все опять ку - проблемой разобрался
немного подкоректировал правила
теперь стало как - вроде все заработало

# ip rule list
0:      from all lookup local
101:    from all fwmark 0x1 lookup corbinawan
201:    from all fwmark 0x2 lookup 2komwan
32766:  from all lookup main
32767:  from all lookup default


# ip route list table corbinawan
192.168.69.0/24 dev br0  scope link
127.0.0.0/8 dev lo  scope link
default dev ppp0  scope link


# ip route list table 2komwan
192.168.69.0/24 dev br0  scope link
127.0.0.0/8 dev lo  scope link
default dev ppp1  scope link

:POSTROUTING ACCEPT [814759064:1103320405488]
-A INPUT -i ppp0 -j CONNMARK --set-xmark 0x1/0xffffffff
-A INPUT -i ppp1 -j CONNMARK --set-xmark 0x2/0xffffffff
-A FORWARD -i ppp0 -j CONNMARK --set-xmark 0x1/0xffffffff
-A FORWARD -i ppp1 -j CONNMARK --set-xmark 0x2/0xffffffff
-A FORWARD -o ppp0 -m state --state NEW -j CONNMARK --set-xmark 0x1/0xffffffff
-A FORWARD -o ppp1 -m state --state NEW -j CONNMARK --set-xmark 0x2/0xffffffff
-A FORWARD -o ppp+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
-A OUTPUT -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff


Все стало нормально
Но появился непонятный глюк
есть лесть с машины в сети на RDP за DNAT в другой локалке - то нифига не соедеиняеться -тоесть соединение получает состояние ENSTABLED и тут же CLOSE
если на эту же машину залесть прямо с сервера - то все в порядке
по tcpdump и conntrack все вроде в порядке (если надо будет выложу)

Глянте - может гдето то найдет косяк?
Предыдущий косяк был в том что все пакеты исходящие с интерфейса маркеровались в форварде, а надо было только NEW.


"2 провайдера + DNAT"
Отправлено ALex_hha , 18-Ноя-10 23:39 
> есть лесть с машины в сети на RDP за DNAT в другой локалке

это как?