두 서버 간의 OpenVPN 전송 속도가 매우 느립니다. 이 질문에서는 서버 A와 서버 B를 호출하겠습니다.
서버 A와 서버 B 모두 CentOS 6.6을 실행하고 있습니다. 둘 다 100Mbit 회선이있는 데이터 센터에 있으며 OpenVPN 외부의 두 서버 간의 데이터 전송은 ~ 88Mbps에 가깝습니다.
그러나 서버 A와 서버 B간에 설정 한 OpenVPN 연결을 통해 파일을 전송하려고하면 6.5Mbps 정도의 처리량을 얻습니다.
iperf의 테스트 결과 :
[ 4] local 10.0.0.1 port 5001 connected with 10.0.0.2 port 49184
[ 4] 0.0-10.0 sec 7.38 MBytes 6.19 Mbits/sec
[ 4] 0.0-10.5 sec 7.75 MBytes 6.21 Mbits/sec
[ 5] local 10.0.0.1 port 5001 connected with 10.0.0.2 port 49185
[ 5] 0.0-10.0 sec 7.40 MBytes 6.21 Mbits/sec
[ 5] 0.0-10.4 sec 7.75 MBytes 6.26 Mbits/sec
이러한 OpenVPN iperf 테스트 외에도 두 서버 모두로드가 0 인 상태에서 거의 완전히 유휴 상태입니다.
서버 A에는 IP 10.0.0.1이 할당되며 OpenVPN 서버입니다. 서버 B에는 IP 10.0.0.2가 할당되며 OpenVPN 클라이언트입니다.
서버 A의 OpenVPN 구성은 다음과 같습니다.
port 1194
proto tcp-server
dev tun0
ifconfig 10.0.0.1 10.0.0.2
secret static.key
comp-lzo
verb 3
서버 B의 OpenVPN 구성은 다음과 같습니다.
port 1194
proto tcp-client
dev tun0
remote 204.11.60.69
ifconfig 10.0.0.2 10.0.0.1
secret static.key
comp-lzo
verb 3
내가 주목 한 것 :
1. 첫 번째 생각은 서버의 CPU 병목 현상이 발생한 것입니다. OpenVPN은 단일 스레드이며 두 서버 모두 가장 빠른 인텔 제온 L5520 프로세서를 실행합니다. 그러나 top
iperf 테스트 중 하나 에서 명령을 실행하고 1
코어 별 CPU 사용률을 보려고 누르면 각 코어에서 CPU 부하가 매우 낮다는 것을 알았습니다.
top - 14:32:51 up 13:56, 2 users, load average: 0.22, 0.08, 0.06
Tasks: 257 total, 1 running, 256 sleeping, 0 stopped, 0 zombie
Cpu0 : 2.4%us, 1.4%sy, 0.0%ni, 94.8%id, 0.3%wa, 0.0%hi, 1.0%si, 0.0%st
Cpu1 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 0.0%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.3%st
Cpu3 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu4 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu5 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu6 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu7 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu8 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu9 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu10 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu11 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu12 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu13 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu14 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu15 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 946768k total, 633640k used, 313128k free, 68168k buffers
Swap: 4192188k total, 0k used, 4192188k free, 361572k cached
2. iperf를 실행하는 동안 핑 시간은 OpenVPN을 터널을 통해 상당히 증가한다. iperf가 실행 중이 아닌 경우 터널에서 핑 시간은 일관되게 60ms입니다 (정상). 그러나 iperf가 실행 중이고 많은 트래픽을 발생 시키면 핑 시간이 불규칙 해집니다. iperf 테스트를 시작했을 때 네 번째 핑까지 핑 시간이 어떻게 안정적인지 아래에서 확인할 수 있습니다.
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=60.1 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=60.1 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=60.2 ms
** iperf test begins **
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=146 ms
64 bytes from 10.0.0.2: icmp_seq=5 ttl=64 time=114 ms
64 bytes from 10.0.0.2: icmp_seq=6 ttl=64 time=85.6 ms
64 bytes from 10.0.0.2: icmp_seq=7 ttl=64 time=176 ms
64 bytes from 10.0.0.2: icmp_seq=8 ttl=64 time=204 ms
64 bytes from 10.0.0.2: icmp_seq=9 ttl=64 time=231 ms
64 bytes from 10.0.0.2: icmp_seq=10 ttl=64 time=197 ms
64 bytes from 10.0.0.2: icmp_seq=11 ttl=64 time=233 ms
64 bytes from 10.0.0.2: icmp_seq=12 ttl=64 time=152 ms
64 bytes from 10.0.0.2: icmp_seq=13 ttl=64 time=216 ms
3. 위에서 언급했듯이 OpenVPN 터널 외부에서 iperf를 실행했으며 처리량은 ~ 88Mbps로 일정했습니다.
내가 시도한 것 :
1. 압축이 문제가 될 수 있다고 생각했기 때문에 comp-lzo
두 구성에서 모두 제거 하고 OpenVPN을 다시 시작 하여 압축을 해제했습니다 . 개선이 없습니다.
2. 이전에 CPU 사용률이 낮다는 것을 알았지 만 기본 암호는 시스템이 유지하기에는 너무 집중적이라고 생각했습니다. 그래서 cipher RC2-40-CBC
두 구성 (매우 가벼운 암호)에 추가하고 OpenVPN을 다시 시작했습니다. 개선이 없습니다.
3. 조각, mssfix 및 mtu-tun을 조정하여 성능을 향상시키는 방법에 대한 다양한 포럼을 읽었습니다. 이 기사 에서 설명한 것처럼 몇 가지 변형을 연주 했지만 다시는 개선되지 않았습니다.
OpenVPN 성능 저하의 원인에 대한 아이디어가 있습니까?
cipher none
그것이 도움이 될지 의심하지만 시도 하고 싶은 유혹을받을 수 있습니다 .