Есть 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 defaultserver:~# 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 linkserver:~# 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 dataserver:~# 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-dc320000eth1 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-dc420000lo 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 начитает ходить как положено через второго прова - прям мистика какая то. :(
Подскажите чего-нить - думаю что гдето косяк в настройках - но никак не могу найти где.
попробуйте пробрасывать с разных ppp на разные ip или порты, а не все на 192.168.69.2:1723.
и потом маркировать ответные пакеты на основании того от куда они идут.
> попробуйте пробрасывать с разных ppp на разные ip или порты, а не
> все на 192.168.69.2:1723.
> и потом маркировать ответные пакеты на основании того от куда они идут.так работает - но у меня 1 vpn сервак - мутить алиасы на нем не хочеться - да и не правельно. должно работать но не работает сволоч - вернее работает - но както странно.
>> попробуйте пробрасывать с разных ppp на разные ip или порты, а не
>> все на 192.168.69.2:1723.
>> и потом маркировать ответные пакеты на основании того от куда они идут.
> так работает - но у меня 1 vpn сервак - мутить алиасы
> на нем не хочеться - да и не правельно. должно работать
> но не работает сволоч - вернее работает - но както странно.да, вариант не красивый, то что предложил ALex_hha лучше.
по поводу "должно работать", помоему прикол в том что ответные пакеты маркируются не там где задумывалось.
На днях решал такую же проблему, пробрасывал запросы на внутр 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
>[оверквотинг удален]
> 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... =)
> Как-то я ранее не обращал внимания ни на модуль iptables conntrack, ни
> на опцию ctorigdst... =)очень удобная вещь, и правила наглядные и логические получаются
>> Как-то я ранее не обращал внимания ни на модуль 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.
> есть лесть с машины в сети на RDP за DNAT в другой локалкеэто как?