Güvenilmez bir ağ üzerinden gelişmiş Linux yönlendirmeli yedek OpenVPN bağlantıları


9

Şu anda birçok web sitesini engelleyen ve dış dünyaya güvenilir ağ bağlantılarına sahip bir ülkede yaşıyorum. Güvenlik duvarını atlatmak için kullandığım Linux sunucularında iki OpenVPN uç noktam var (diyelim: vpn1 ve vpn2). Bu sunuculara tam erişimim var. VPN bağlantılarımdaki yüksek paket kaybı dışında bu oldukça iyi çalışıyor. Bu paket kaybı zamana bağlı olarak% 1 ile% 30 arasında değişmektedir ve çoğu zaman rasgele gibi görünen düşük bir korelasyona sahip görünmektedir.

Her iki uç noktaya da OpenVPN bağlantılarını sürdüren ve tüm paketleri iki uç noktaya da gönderen bir ev yönlendiricisi (Linux'ta da) kurmayı düşünüyorum. vpn2 tüm paketleri evden vpn1'e gönderir. Dönüş trafiği doğrudan vpn1'den eve ve ayrıca vpn2 üzerinden gönderilir.

       +------------+
       |    home    |
       +------------+
        |          |
        | OpenVPN  |
        |  links   |
        |          |
     ~~~~~~~~~~~~~~~~~~ unreliable connection
        |          |
+----------+   +----------+
|   vpn1   |---|   vpn2   |
+----------+   +----------+
        |
       +------------+
       | HTTP proxy |
       +------------+
             |
         (internet)

Netlik için: ev ve HTTP proxy arasındaki tüm paketler çoğaltılacak ve bunlardan birinin gelme şansını artırmak için farklı yollar üzerinden gönderilecektir. Her ikisi de gelirse, ilk ikincisi sessizce atılabilir.

Bant genişliği kullanımı, hem giriş hem de bitiş noktası tarafında bir sorun oluşturmaz. vpn1 ve vpn2 birbirine yakındır (3ms ping) ve güvenilir bir bağlantıya sahiptir.

Linux'ta bulunan gelişmiş yönlendirme politikaları kullanılarak bunun nasıl başarılabileceğine dair herhangi bir işaret var mı?

Yanıtlar:


8

'Home' ve 'vpn1' tarafındaki yapıştırma altyapısını ve özellikle bir bağa ait tüm arabirimlerde trafik yayını yapan mode = 3 ayarıyla kullanın.

Bağlamayı yapılandırma hakkında daha fazla bilgi için http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.37.y.git;a=blob;f adresindeki mükemmel kılavuza bakın. = Belgeler / ağ / bonding.txt h = 5dc638791d975116bf1a1e590fdfc44a6ae5c33c, YP = KAFA


Bu kurulumu test ettim ve harika çalışıyor. Paket kaybı, yalnızca bir sunucuya yedek bağlantı ile% 5'ten% 0.0-0.1'e düşürüldü!
Mart'ta

7

@ User48116 tarafından verilen yanıtı kullandım ve bir cazibe gibi çalışıyor. Kurulum aslında oldukça kolay!

NOT : Bunu tek bir sunucuya iki bağlantı ile uyguladım, çünkü bu zaten benim için sorunu çözdü. İki sunucuyla bir kurulum denemek istiyorsanız, en kolay yol muhtemelen UDP bağlantı noktasını ikinci sunucudan birinciye iletmek için bağlantı noktası iletmeyi kullanmak ve burada açıklananla aynı tarifi kullanmaktır. Bunu kendim test etmedim.

İlk olarak, bağlama desteğine sahip 2.6 çekirdeğinizin (tüm modern dağıtımlarda varsayılan) olduğundan ve ifenslave'in kurulu olduğundan emin olun.

Ardından, bunu /etc/rc.local veya tercih ettiğiniz başka bir yere koyun, ancak openvpn başlamadan önce çalıştırıldığından emin olun (çünkü bond0'a bağlanmaya çalışacaktır):

Müşteri:

modprobe bonding mode=broadcast
ifconfig bond0 10.10.0.2 netmask 255.255.255.0 up

Burada gerekirse bazı yönlendirme ekleyebilirsiniz, diğer taraftan da tüm uygun yönlendirmeyi yaptığınızdan emin olun.

route add -net 10.7.0.0/24 gw 10.10.0.1

Sunucu:

modprobe bonding mode=broadcast
ifconfig bond0 10.10.0.1 netmask 255.255.255.0 up

Bir /etc/openvpn/tap-up.sh betiği oluşturun (ve chmod a + x tap-up.sh ile yürütülebilir dosyayı işaretlemeyi unutmayın):

#!/bin/sh
# called as: cmd tap_dev tap_mtu link_mtu ifconfig_local_ip ifconfig_netmask [ init | restart ]
ifenslave bond0 "$1"

Ardından, paylaşılan bir anahtarla birlikte / etc / openvpn / öğesine bir bridge0a.conf ve bridge0b.conf ekleyin. Dosyalar farklı bir bağlantı noktası dışında a ve b için aynıdır (örneğin, b için 3002 kullanın). 11.22.33.44'ü sunucunuzun genel IP'si ile değiştirin.

Müşteri:

remote 11.22.33.44
dev tap
port 3001
rport 3001
secret bridge.key
comp-lzo
verb 4
nobind
persist-tun
persist-key
script-security 2
up /etc/openvpn/tap-up.sh

Sunucu:

local 11.22.33.44
dev tap
port 3001
lport 3001
secret bridge.key
comp-lzo
verb 4
script-security 2
up /etc/openvpn/tap-up.sh

Yeni VPN yapılandırmalarınızın başlatıldığından emin olmak için / etc / defaultults / openvpn dosyasını düzenlemeyi unutmayın. Makinelerinizi yeniden başlatın veya rc.local yükleyin ve openvpn'yi manuel olarak yeniden başlatın.

Artık kurulumunuzu test etmeye hazırsınız:

# ping 10.10.0.1
PING 10.10.0.1 (10.10.0.1) 56(84) bytes of data.
64 bytes from 10.10.0.1: icmp_req=1 ttl=64 time=50.4 ms
64 bytes from 10.10.0.1: icmp_req=1 ttl=64 time=51.1 ms (DUP!)
64 bytes from 10.10.0.1: icmp_req=1 ttl=64 time=51.1 ms (DUP!)
64 bytes from 10.10.0.1: icmp_req=1 ttl=64 time=51.1 ms (DUP!)
64 bytes from 10.10.0.1: icmp_req=2 ttl=64 time=52.0 ms
64 bytes from 10.10.0.1: icmp_req=2 ttl=64 time=52.2 ms (DUP!)
64 bytes from 10.10.0.1: icmp_req=2 ttl=64 time=53.0 ms (DUP!)
64 bytes from 10.10.0.1: icmp_req=2 ttl=64 time=53.1 ms (DUP!)
--- 10.10.0.1 ping statistics ---
2 packets transmitted, 2 received, +6 duplicates, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 50.428/51.786/53.160/0.955 ms

Her şey yolunda giderse ve hat iyi ise, her ICMP paketi için dört yanıt görürsünüz : paketleriniz yerel tarafta çoğaltılır ve bu iki pakete verilen yanıtlar uzak tarafta tekrar çoğaltılır. Bu TCP bağlantıları için bir sorun olmayacaktır, çünkü TCP tüm kopyaları yok sayar.

Kopyaları işlemek için yazılıma bağlı olduğundan, bu UDP paketleri için bir sorundur. Örneğin, bir DNS sorgusu beklenen iki yerine dört yanıt verir (ve yanıt için iki kez yerine normal bant genişliğinin dört katını kullanır):

# tcpdump -i bond0 -n port 53
listening on bond0, link-type EN10MB (Ethernet), capture size 65535 bytes
13:30:39.870740 IP 10.10.0.2.59330 > 10.7.0.1.53: 59577+ A? serverfault.com. (33)
13:30:40.174281 IP 10.7.0.1.53 > 10.10.0.2.59330: 59577 1/0/0 A 64.34.119.12 (49)
13:30:40.174471 IP 10.7.0.1.53 > 10.10.0.2.59330: 59577 1/0/0 A 64.34.119.12 (49)
13:30:40.186664 IP 10.7.0.1.53 > 10.10.0.2.59330: 59577 1/0/0 A 64.34.119.12 (49)
13:30:40.187030 IP 10.7.0.1.53 > 10.10.0.2.59330: 59577 1/0/0 A 64.34.119.12 (49)

İyi şanslar!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.