SSH tunneling เร็วกว่า OpenVPN ใช่มั้ย


21

ตามหลักเหตุผล VPN ควรเร็วกว่า SSH สำหรับการขุดอุโมงค์เนื่องจาก:

  • มันทำงานบน UDP และไม่ใช่ TCP (ดังนั้นจึงไม่มี TCP ผ่าน TCP)
  • มันมีการบีบอัด

อย่างไรก็ตามวันนี้ฉันทดสอบ Redis replication ผ่านทั้งสองวิธี
ฉันทำการทดสอบกับ Ireland AWS VM ซึ่งเชื่อมต่อกับ 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's ~ 2MB / s
นั่นหมายความว่าสิ่งที่ฉันได้ทำการยืนยันใหม่นั้นผิดหรือมีการตั้งค่าผิดพลาดอย่างสิ้นเชิงหรือไม่?

ปรับปรุง

ฉันได้ทำการทดสอบหลายชุดด้วยชุดข้อมูลเดียวกันและได้ผลลัพธ์เหล่านี้:

  • OpenVPN
    • TCP: การ
      บีบอัด: 15m
      ไม่มีการบีบอัด: 21m
    • UDP: การ
      บีบอัด: 5m
      ไม่มีการบีบอัด: 6m

  • ค่าเริ่มต้นSSH : 1m50s
    ไม่มีการบีบอัด: 1m30s การ
    บีบอัด: 2m30s

Update2

นี่คือผลลัพธ์ iperf พร้อมการทดสอบสองทิศทาง (ยกเว้น SSH โดยที่ไม่มีเส้นทางการส่งคืน)

| 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 (เหมือนกับใน Ubuntu 14.10 ดังนั้นจึงไม่มีรุ่นที่น่าเบื่อ)
SSH tunneling ของฉันดูเหมือนว่า:

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 ให้รันบนหรืออะไรก็ได้บนไคลเอนต์ / เซิร์ฟเวอร์ของคุณ มีสัญญาณที่ชัดเจนว่าคุณใช้ CPU / หน่วยความจำ / สูงสุดด้วยการเชื่อมต่อ VPN หรือไม่?
Zoredache

2
ดูเหมือนว่าไม่น่าเป็นไปได้สำหรับระบบโฮสต์ AWS แต่มีความเป็นไปได้น้อยที่ UDP จะได้รับอัตรา จำกัด หรือบางสิ่งบางอย่าง คุณได้ลองทำ OpenVPN ผ่าน TCP หรือไม่?
Zoredache

4
@Nitz อุโมงค์ TCP ใน ssh ห้ามใช้ TCP ใด ๆ บน TCP ในความเป็นจริงลูกค้า ssh มักจะทำงานด้วยสิทธิ์ไม่เพียงพอที่จะทำมัน และไม่ ssh ไม่ได้ตัดส่วนหัว TCP ใด ๆ จากแพ็คเก็ตเพราะมันไม่เคยสัมผัสแม้แต่แพ็คเก็ต TCP ssh เป็นเพียงแอปพลิเคชั่นที่ทำการใช้ TCP stack ในเคอร์เนลเช่นเดียวกับแอปพลิเคชันอื่น ๆ ข้อมูลเดินทางผ่านการเชื่อมต่อ TCP เดียวจากบางโปรแกรมไปยังไคลเอ็นต์ ssh ไคลเอ็นต์ ssh เข้ารหัสข้อมูลและส่งผ่านการเชื่อมต่อ TCP ไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์ถอดรหัสมันและส่งผ่านการเชื่อมต่อ TCP ที่สามไปยังโปรแกรมที่ปลายอีกด้านหนึ่ง
kasperd

2
แน่นอนว่าอาจมีค่าใช้จ่ายเพิ่มอีกเล็กน้อยด้วย OpenVPN เนื่องจากมีส่วนหัว IP / TCp เพิ่มเติม แต่นั่นไม่ควรสร้างความแตกต่างได้ช้ากว่า 4-10 เท่า หากความแตกต่างอยู่ในช่วงที่ช้าลง 5-10% ฉันอาจถูกตำหนิได้ เหตุผลที่คุณอาจต้องการตรวจสอบก็คือนี่อาจเป็นอาการของปัญหาพื้นฐานบางอย่างที่อาจส่งผลกระทบต่อสิ่งอื่นในแบบที่ไม่ชัดเจน
Zoredache

2
@Nitz ถ้าฉันเข้าใจคุณอย่างถูกต้องคุณกำลังบอกว่าแพ็กเก็ตที่ไม่ได้เข้ารหัสที่เข้าสู่อินเตอร์เฟสเสมือนนั้นมีขนาด 1424 ไบต์ แต่แพ็คเก็ตที่เข้ารหัสส่งไปยังส่วนต่อประสานทางกายภาพนั้นมีเพียง 160 ไบต์ นั่นจะบ่งบอกว่ามีการแตกแฟรกเมนต์ที่รุนแรงเกิดขึ้นที่เลเยอร์ VPN หรือเลเยอร์ UDP / IP ด้านล่าง นั่นอาจอธิบายปัญหาประสิทธิภาพได้อย่างแน่นอน แพ็กเก็ตบนอินเตอร์เฟสเสมือนควรเป็นบางสิ่งบางอย่างตามลำดับ 1300-1400 ไบต์ แพ็กเก็ตบนอินเตอร์เฟสแบบฟิสิคัลควรเป็นบางสิ่งตามลำดับที่ 1,400-1500 ไบต์
kasperd

คำตอบ:


7

จากความคิดเห็นของkasperdฉันได้เรียนรู้ว่า SSH ไม่ได้รับผลกระทบจาก TCP-over-TCP เนื่องจากมันย้ายเฉพาะข้อมูลแพ็คเก็ต ฉันเขียนโพสต์บล็อกเกี่ยวกับเรื่องนี้ แต่สิ่งที่น่าสนใจที่สุดคือผลลัพธ์ที่พิสูจน์ว่า SSH ไม่ได้รักษาข้อมูลเลเยอร์ 3,4 ไว้อย่างแน่นอน: netstat

หลังจากการขุดอุโมงค์ก่อนทำการเชื่อมต่อ

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 tunneling เนื่องจากดูเหมือนว่า OpenVPN ของฉันไม่ได้กำหนดค่าผิดพลาดหรืออะไรก็ตามไม่ใช่เครื่องมือที่เหมาะสมสำหรับงาน


3

มันขึ้นอยู่กับสิ่งที่คุณพยายามที่จะบรรลุและสิ่งที่มีความสำคัญของคุณ VPN เชื่อมต่อคุณกับเครือข่ายและ SSH กับเครื่อง VPN มีความปลอดภัยเพิ่มขึ้นเล็กน้อยเมื่อใช้การห่อหุ้มซึ่ง SSH ไม่ได้ทำ

VPN ช่วยให้การรับส่งข้อมูลทั้งหมดผ่านไปได้อย่างง่ายดายเมื่อเปรียบเทียบกับ SSH ที่ซึ่งคุณจะต้องบังคับใช้แอปพลิเคชัน

คุณจะใช้ AD หรือเปล่า? เพราะ VPN จะช่วยให้คุณทำเช่นนั้นได้อย่างง่ายดายมากขึ้น

ฉันชอบ SSH สำหรับความจำเป็นอย่างรวดเร็วและ VPN สำหรับแอปพลิเคชันที่สำคัญที่ฉันควรมีเวลาว่างเพิ่ม

ฉันได้ใช้ SSH ใน VPN ในกรณีที่ VPN ถูกทำลายโดยขึ้นอยู่กับสถานการณ์ วิธีนี้คนที่ต้องการตรวจสอบจะต้องผ่านอุโมงค์ SSH


2
ฉันกำลังวิ่ง redis เหนืออุโมงค์ดังนั้นพอร์ตเดียวก็พอแล้วสำหรับฉัน ฉันรู้สึกทึ่งกับความจริงที่ว่า VPN ไม่ได้เป็นทางออกที่ดีที่สุดสำหรับการเจาะช่องทางเครือข่าย
Nitz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.