10Gb 네트워크의 Strongswan IPsec 전송 내에서 실행되는 nfs의 성능을 최적화하는 방법

10Gb 네트워크의 Strongswan IPsec 전송 내에서 실행되는 nfs의 성능을 최적화하는 방법

호스트 1: Ubuntu 18.04 호스트 2: Freebsd 11.2

내 상황은 다음과 같습니다... nfsv3을 보호하기 위해 Strongswan IPsec 전송이 구성된 10G LAN에 2개의 호스트가 있습니다. (예, nfsv3가 오래되었다는 것을 알고 계속 진행해야 하지만 왜...). 체인의 마지막 링크(호스트 2 인터페이스, 10G 스위치 인터페이스, 기타 10G 스위치 인터페이스, 호스트 1 인터페이스)의 MTU를 9000으로 설정하면 nfs 설치가 중단되는 것 같습니다.

나는 해결해야 할 두 가지 문제가 있다고 생각합니다. 첫째, IPsec 연결이 설정되면 iperf3을 통해 측정된 성능이 9.4Gb/초에서 약 800Mb/초로 떨어집니다. 둘째, 터널이 작동되고 모든 관련 인터페이스가 mtu 9000을 사용하면 NFS 마운트는 아무 것도 할 수 없습니다.

그렇다면 10G LAN에서 IPsec 성능을 향상시키려면 어떻게 해야 할까요? 내 NFS에 어떤 문제가 있나요?

Host1은 다음 fstab 항목을 사용하여 NFS를 통해 Host2를 마운트하고 있습니다.

host2:/exports/share /mnt/storage nfs    
_netdev,nofail,noatime,nolock,tcp,actimeo=1800  0 0

이는 10G LAN이므로 10G LAN에 대해 더 많은 최적화를 수행하기 위해 두 시스템 모두의 커널 옵션을 업데이트했습니다.

/etc/sysctl.d/10-mychanges.conf의 Host1 커널 조정

# Maximum receive socket buffer size
net.core.rmem_max = 134217728

# Maximum send socket buffer size
net.core.wmem_max = 134217728

# Minimum, initial and max TCP Receive buffer size in Bytes
net.ipv4.tcp_rmem = 4096 87380 134217728

# Minimum, initial and max buffer space allocated
net.ipv4.tcp_wmem = 4096 65536 134217728

# Maximum number of packets queued on the input side
net.core.netdev_max_backlog = 300000

# Auto tuning
net.ipv4.tcp_moderate_rcvbuf = 1

# Don't cache ssthresh from previous connection
net.ipv4.tcp_no_metrics_save = 1

# The Hamilton TCP (HighSpeed-TCP) algorithm is a packet loss based congestion control and is more aggressive pushing up to max bandwidth (total BDP) and favors hosts with lower TTL / VARTTL.
net.ipv4.tcp_congestion_control=htcp

# If you are using jumbo frames set this to avoid MTU black holes.
net.ipv4.tcp_mtu_probing = 1

호스트1 ipsec.conf

# ipsec.conf - strongSwan IPsec configuration file

# basic configuration
config setup
        charondebug="ike 4, knl 4, cfg 4"

conn %default
        ikelifetime=60m
        keylife=20m
        rekeymargin=3m
        keyingtries=1
        keyexchange=ikev2
        mobike=no

conn host-host

        left=192.168.0.4
        leftid=@host1
        leftcert=/etc/ipsec.d/certs/host_cert.pem
        right=192.168.0.5
        rightid=@host2
        auto=add
        authby=rsasig
        type=transport
        compress=no

호스트 2(무료 BSD)

# $FreeBSD: releng/11.2/etc/sysctl.conf 112200 2003-03-13 18:43:50Z mux $
#
#  This file is read when going to multi-user and its contents piped thru
#  ``sysctl'' to adjust kernel values.  ``man 5 sysctl.conf'' for details.
#
# Uncomment this to prevent users from seeing information about processes that
# are being run under another UID.
#security.bsd.see_other_uids=0
# set to at least 16MB for 10GE hosts
kern.ipc.maxsockbuf=16777216

# set autotuning maximum to at least 16MB too
net.inet.tcp.sendbuf_max=16777216
net.inet.tcp.recvbuf_max=16777216

# enable send/recv autotuning
net.inet.tcp.sendbuf_auto=1
net.inet.tcp.recvbuf_auto=1

# increase autotuning step size
net.inet.tcp.sendbuf_inc=16384
net.inet.tcp.recvbuf_inc=524288

# set this on test/measurement hosts
net.inet.tcp.hostcache.expire=1

# Set congestion control algorithm to Cubic or HTCP
# Make sure the module is loaded at boot time - check loader.conf
# net.inet.tcp.cc.algorithm=cubic
net.inet.tcp.cc.algorithm=htcp

호스트2 ipsec.conf

# ipsec.conf - strongSwan IPsec configuration file

# basic configuration
config setup
        charondebug="ike 4, knl 4, cfg 4"

conn %default
        ikelifetime=60m
        keylife=20m
        rekeymargin=3m
        keyingtries=1
        keyexchange=ikev2
        mobike=no

conn host-host

        left=192.168.0.5
        leftid=@host2
      leftcert=/usr/local/etc/ipsec.d/certs/host_cert.pem
        right=192.168.0.4
        rightid=@host1
        auto=add
        authby=rsasig
        type=transport
        compress=no

관련 정보