SSH 터널링은 OpenVPN보다 빠릅니다.


21

논리적으로 VPN은 터널링을 위해 SSH보다 빠릅니다.

  • TCP가 아닌 UDP에서 실행 중이므로 TCP를 통한 TCP는 없습니다.
  • 그것은 압축이

그러나 오늘 저는 두 방법 모두에서 Redis 복제를 테스트했습니다.
아일랜드 동부 AWS VM에서 테스트를 실행하여 미국 동부 AWS VM에 연결했습니다.
나는 빈 레디 스 서버를 실행하고, 완료로드 후, 나는 실행 - 내 테스트 케이스 레디 스 복제이기 때문에, 이것은 내가 테스트를 정확히 무엇을 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는 OpenVPN의 ~ 2MB / s에 비해 ~ 11MB / s의 롱 샷으로 승리했습니다.
다시 설정 한 항목이 모두 잘못되었거나 설정이 잘못 잘못되었음을 의미합니까?

최신 정보

동일한 데이터 세트로 여러 테스트를 수행 한 결과는 다음과 같습니다.

  • OpenVPN
    • TCP :
      압축 : 15m
      압축 없음 : 21m
    • UDP :
      압축 : 5m
      압축 없음 : 6m
  • SSH
    기본값 : 1m50s
    압축 없음 : 1m30s
    압축 : 2m30s

업데이트 2

다음은 양방향 테스트를 사용한 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 터널링은 다음과 같습니다.

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을 통한 전송을 수행 할 때 클라이언트 / 서버에서 top 또는 무언가를 실행하십시오. VPN 연결로 CPU / 메모리 등을 최대로 사용하고 있다는 명백한 징후가 있습니까?
Zoredache

2
AWS 호스팅 시스템에서는 가능성이 거의 없지만 UDP가 속도가 제한되는 등의 가능성이 적습니다. TCP를 통한 OpenVPN을 시도해 보셨습니까?
Zoredache

4
ssh의 @Nitz TCP 터널은 TCP over TCP를 사용하지 않습니다. 실제로 ssh 클라이언트는 일반적으로 권한이 충분하지 않아서 실행할 수도 있습니다. 그리고 ssh는 TCP 패킷을 건드리지 않기 때문에 패킷에서 TCP 헤더를 제거하지 않습니다. ssh는 다른 응용 프로그램과 마찬가지로 커널에서 TCP 스택을 사용하는 응용 프로그램입니다. 데이터는 하나의 TCP 연결을 통해 일부 프로그램에서 ssh 클라이언트로 이동합니다. ssh 클라이언트는 데이터를 암호화하고 TCP 연결을 통해 서버로 보냅니다. 서버는 그것을 해독하고 세 번째 TCP 연결을 통해 다른 쪽의 프로그램으로 보냅니다.
kasperd

2
OpenVPN에는 여분의 IP / TCp 헤더가 있기 때문에 약간 더 많은 오버 헤드가있을 수 있습니다. 그러나 그것이 4-10 배의 차이를 늦춰서는 안됩니다. 차이가 5-10 % 더 느린 범위에 있다면 나는 그것을 비난하고 싶을 수도 있습니다. 여전히 조사하고 싶은 이유는 이것이 명백하지 않은 방식으로 다른 것에 영향을 줄 수있는 근본적인 문제의 증상 일 수 있기 때문입니다.
Zoredache

2
@Nitz 올바르게 이해하면 가상 인터페이스에 들어가는 암호화되지 않은 패킷은 1424 바이트이지만 물리적 인터페이스로 전송되는 암호화 된 패킷은 160 바이트에 불과합니다. 이는 VPN 계층 또는 그 아래의 UDP / IP 계층에서 아주 극단적 인 조각화가 발생했음을 나타냅니다. 그것은 확실히 성능 문제를 설명 할 수 있습니다. 가상 인터페이스의 패킷은 약 1300-1400 바이트 정도 여야합니다. 물리적 인터페이스의 패킷은 약 1400-1500 바이트 정도 여야합니다.
kasperd December

답변:


7

kasperd의견 덕분에 SSH는 패킷 데이터 만 이동하기 때문에 TCP-over-TCP로 고통받지 않는다는 것을 알게되었습니다. 나는 그것에 대해 블로그 게시물을 썼지 만 가장 흥미로운 것은 netstat출력이며 SSH는 실제로 레이어 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

그것은 당신이 성취하려는 것과 우선 순위가 무엇인지에 달려 있습니다. VPN은 네트워크에 연결하고 SSH는 컴퓨터에 연결합니다. VPN은 캡슐화를 통해 좀 더 안전하지만 SSH는 그렇지 않습니다.

또한 VPN을 사용하면 응용 프로그램을 강제 실행해야하는 SSH와 비교하여 모든 트래픽이 쉽게 통과 할 수 있습니다.

AD를 전혀 사용 하시겠습니까? VPN을 사용하면 훨씬 쉽게 할 수 있기 때문입니다.

빠른 시간에는 SSH를, 여분의 시간을 절약해야하는 중요한 애플리케이션에는 VPN을 선호합니다.

상황에 따라 VPN이 손상된 경우 VPN에서 SSH를 사용했습니다. 이런 식으로 누군가 조사 할 때 SSH 터널링을 거쳐야합니다.


2
터널을 통해 redis를 실행 중이므로 단일 포트로 충분합니다. VPN이 항상 네트워크 트래픽 터널링을위한 최상의 솔루션은 아니라는 사실에 놀랐습니다.
Nitz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.