SSH टनलिंग OpenVPN की तुलना में तेज़ है, क्या ऐसा हो सकता है?


21

तार्किक रूप से, वीपीएन को सुरंग बनाने के लिए SSH से तेज होना चाहिए, क्योंकि:

  • यह यूडीपी पर चल रहा है और टीसीपी पर नहीं (इसलिए टीसीपी पर टीसीपी नहीं)
  • इसमें कंप्रेशन है

हालांकि, आज मैंने दोनों तरीकों से रेडिस प्रतिकृति का परीक्षण किया।
मैंने आयरलैंड AWS VM पर परीक्षण चलाया, जो US-East AWS VM से जुड़ा।
मैं एक खाली Redis सर्वर भाग गया, और उसके बाद यह समाप्त लोड हो रहा है, मैं मार डाला - चूंकि मेरे परीक्षण का मामला Redis प्रतिकृति है, यह मैं वास्तव में क्या परीक्षण किया है slaveofअन्य सर्वर, और बीच के समय को मापा Connecting to MASTERऔर MASTER <-> SLAVE sync: Finished with success। बीच में, मैं इस्तेमाल किया

while 1; do redis-cli -p 7777 info | grep master_sync_left_bytes;sleep 1; done

गति का एक कच्चा अनुमान पाने के लिए।
SSH ने एक लंबे शॉट से जीता: ~ 11MB / s OpenVPN के ~ 2MB / s की तुलना में।
क्या इसका मतलब यह है कि मैंने जो कुछ भी दोहराया था वह गलत था, या क्या मैंने अपने सेटअप को गलत तरीके से गलत बनाया है?

अद्यतन करें

मैंने एक ही डाटासेट के साथ कई परीक्षण किए हैं, और ये परिणाम मिले हैं:

  • OpenVPN
    • टीसीपी:
      संपीड़न: 15 मीटर
      कोई संपीड़न: 21 मीटर
    • यूडीपी:
      संपीड़न: 5 मीटर
      कोई संपीड़न: 6 मी
  • SSH
    चूक: 1m50s
    कोई संपीड़न नहीं: 1m30s
    संपीड़न: 2m30s

Update2

यहां द्विदिश परीक्षण (SSH को छोड़कर, जहां कोई वापसी का रास्ता उपलब्ध नहीं है) के साथ iperf परिणाम हैं

| method           | result (Mb/s)|
|------------------+--------------|
| ssh              | 91.1 / N.A   |
| vpn blowfish udp | 43 / 11      |
| vpn blowfish tcp | 13 / 12      |
| vpn AES udp      | 36 / 4       |
| vpn AES tcp      | 12 / 5       |

तकनीकी चश्मा

मैं CentOS 6.3 (सर्वर), CentOS 6.5 (क्लाइंट) चला रहा हूं।
OpenVPN संस्करण 2.3.2 है (उबंटू में 14.10 के रूप में, इसलिए कोई साँचा संस्करण नहीं है)
मेरा SSH सुरंग जैसा दिखता है:

ssh -f XXXX@XXXX -i XXXX -L 12345:127.0.0.1:12345 -N

मेरा कॉन्फ़िगरेशन फ़ाइल जैसा दिखता है:
सर्वर

port 1194
proto udp
dev tun0
topology subnet
log /var/log/openvpn.log

ca XXXX
cert XXXX
key XXXX
dh XXXX
crl-verify XXXX

cipher AES-256-CBC

server XXXX 255.255.255.0

ifconfig-pool-persist /etc/openvpn/ipp.txt
keepalive 10 120
comp-lzo
status /var/log/openvpn-status.log
verb 3
tun-mtu 1500
fragment 1300

persist-key
persist-tun

ग्राहक

client

remote XXXX 1194

proto udp
dev tun
log /var/log/openvpn.log
comp-lzo

cipher AES-256-CBC
ns-cert-type server

# the full paths to your server keys and certs
ca XXXX
cert XXXX
key XXXX

tun-mtu 1500 # Device MTU
fragment 1300 # Internal fragmentation

persist-key
persist-tun
nobind

3
SSH संपीड़न का भी समर्थन करता है, ताकि OpenVPN और SSH के बीच कुछ अलग न हो। क्या आपने दोनों तरफ संपीड़न को अक्षम करने का प्रयास किया है? जब आप OpenVPN पर स्थानांतरण करते हैं, तो अपने क्लाइंट / सर्वर पर शीर्ष या कुछ चलाएं। क्या कोई स्पष्ट संकेत हैं कि आप वीपीएन कनेक्शन के साथ अपने सीपीयू / मेमोरी / आदि को अधिकतम कर रहे हैं?
ज़ॉडेचेचे

2
ऐसा लगता है कि AWS होस्टेड सिस्टम के लिए संभावना नहीं है, लेकिन इस बात की बहुत कम संभावना है कि UDP को सीमित या कुछ और मिल रहा है। क्या आपने TCP पर OpenVPN करने की कोशिश की है?
ज़ॉडेचेचे

4
@ एनटीएस टीसीपी सुरंगों को एसएसपी में टीसीपी पर किसी भी टीसीपी का उपयोग न करें। वास्तव में ssh क्लाइंट आमतौर पर अपर्याप्त विशेषाधिकार के साथ चलाया जाता है। और नहीं, ssh किसी भी टीसीपी हेडर को पैकेट से नहीं हटाता है, क्योंकि यह कभी भी टीसीपी पैकेट को नहीं छूता है। ssh, कर्नेल में किसी अन्य एप्लिकेशन की तरह टीसीपी स्टैक का उपयोग करने वाला एक एप्लिकेशन है। डेटा ssh क्लाइंट के लिए कुछ प्रोग्राम से एक टीसीपी कनेक्शन के माध्यम से यात्रा करता है। Ssh क्लाइंट डेटा को एन्क्रिप्ट करता है और इसे सर्वर से टीसीपी कनेक्शन के माध्यम से भेजता है। सर्वर इसे अंत में तीसरे प्रोग्राम के लिए तीसरे टीसीपी कनेक्शन के माध्यम से भेज देता है।
कैस्परल्ड

2
यकीन है कि ओपनवीपीएन के साथ थोड़ा अधिक ओवरहेड हो सकता है क्योंकि इसमें अतिरिक्त आईपी / टीसीपी हेडर हैं। लेकिन इससे 4-10 गुना धीमा अंतर नहीं होना चाहिए। यदि अंतर 5-10% धीमी रेंज में था तो मुझे दोषी ठहराया जा सकता है। आप अभी भी जांच करना चाहते हो सकता है कारण यह है कि यह कुछ अंतर्निहित समस्या का एक लक्षण हो सकता है जो अन्य चीजों को इस तरह से प्रभावित कर सकता है जो कम स्पष्ट है।
ज़ॉडेचेचे

2
@Nitz अगर मैं आपको सही ढंग से समझता हूं, तो आप कह रहे हैं कि वर्चुअल इंटरफ़ेस में प्रवेश करने वाले अनएन्क्रिप्टेड पैकेट 1424 बाइट्स हैं, लेकिन फिजिकल इंटरफेस पर भेजे गए एन्क्रिप्टेड पैकेट केवल 160 बाइट्स हैं। यह वीपीएन परत या इसके नीचे यूडीपी / आईपी परत पर होने वाले एक अत्यधिक चरम विखंडन को इंगित करेगा। यह निश्चित रूप से प्रदर्शन की समस्या की व्याख्या कर सकता है। वर्चुअल इंटरफ़ेस पर पैकेट 1300-1400 बाइट्स के आदेश पर कुछ होना चाहिए। 1400-1500 बाइट्स के आदेश पर भौतिक इंटरफ़ेस पर पैकेट कुछ होना चाहिए।
कैसपर्ड

जवाबों:


7

Kasperd की टिप्पणी के लिए धन्यवाद , मैंने सीखा कि SSH TCP-over-TCP से पीड़ित नहीं है क्योंकि यह केवल पैकेट डेटा को स्थानांतरित करता है। मैंने इसके बारे में एक ब्लॉग पोस्ट लिखा था , लेकिन सबसे दिलचस्प बात यह है netstatकि यह साबित करता है कि एसएसएच वास्तव में लेयर 3,4 को संरक्षित नहीं करता है:

टनलिंग के बाद, कनेक्ट करने से पहले

backslasher@client$ netstat -nap | grep -P '(ssh|redis)'
...
tcp        0      0 127.0.0.1:20000             0.0.0.0:*                   LISTEN      20879/ssh
tcp        0      0 10.105.16.225:53142         <SERVER IP>:22              ESTABLISHED 20879/ssh
...

backslasher@server$ netstat -nap | grep -P '(ssh|redis)'
...
tcp        0      0 0.0.0.0:6379                0.0.0.0:*                   LISTEN      54328/redis-server
tcp        0      0 <SERVER IP>:22              <CLIENT IP>:53142           ESTABLISHED 53692/sshd
...

सुरंग बनाने और जोड़ने के बाद

backslasher@client$ netstat -nap | grep -P '(ssh|redis)'
...
tcp        0      0 127.0.0.1:20000             0.0.0.0:*                   LISTEN      20879/ssh
tcp        0      0 127.0.0.1:20000             127.0.0.1:53142             ESTABLISHED 20879/ssh
tcp        0      0 127.0.0.1:53142             127.0.0.1:20000             ESTABLISHED 21692/redis-cli
...

backslasher@server$ netstat -nap | grep -P '(ssh|redis)'
...
tcp        0      0 0.0.0.0:6379                0.0.0.0:*                   LISTEN      54328/redis-server
tcp        0      0 127.0.0.1:6379              127.0.0.1:42680             ESTABLISHED 54328/redis-server
tcp        0      0 127.0.0.1:42680             127.0.0.1:6379              ESTABLISHED 54333/sshd
tcp        0      0 <SERVER IP>:22              <CLIENT IP>:53142           ESTABLISHED 52889/sshd
...

इसलिए मैं SSH टनलिंग का उपयोग करने जा रहा हूं, क्योंकि ऐसा लगता है कि मेरा OpenVPN गलत या कुछ भी गलत नहीं है, सिर्फ नौकरी के लिए सही उपकरण नहीं है।


3

यह निर्भर करता है कि आप क्या हासिल करने की कोशिश कर रहे हैं और आपकी प्राथमिकताएं क्या हैं। वीपीएन आपको एक नेटवर्क और एसएसएच से एक मशीन से जोड़ता है। वीपीएन इनकैप्सुलेशन के साथ थोड़ा अधिक सुरक्षित है, जो एसएसएच नहीं करता है।

इसके अलावा, वीपीएन सभी ट्रैफ़िक को आसानी से इसके माध्यम से जाने की अनुमति देता है, बनाम एसएसएच जहां आपको अनुप्रयोगों को मजबूर करना होगा।

क्या आप AD का उपयोग करने जा रहे हैं? क्योंकि वीपीएन आपको बहुत अधिक आसानी के साथ ऐसा करने देगा।

मैं महत्वपूर्ण अनुप्रयोगों के लिए त्वरित आवश्यकताओं और वीपीएन के लिए एसएसएच को प्राथमिकता देता हूं जहां मुझे अतिरिक्त समय छोड़ना चाहिए।

स्थिति के आधार पर, मैंने वीपीएन में समझौता किए जाने की स्थिति में एसएसएच का उपयोग वीपीएन में किया है। इस तरह से जांच करने वाले किसी व्यक्ति को SSH सुरंग के माध्यम से प्राप्त करना होगा।


2
मैं सुरंग के ऊपर रेडिस चला रहा हूं, इसलिए एक बंदरगाह मेरे लिए पर्याप्त है। मैं बस इस तथ्य से चकित था कि वीपीएन हमेशा नेटवर्क ट्रैफ़िक के लिए सबसे अच्छा समाधान नहीं है
Nitz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.