When utilizing TOTP with OpenVPN, the connection appears to try and re-authenticate the user after an hour which causes the client to re-send the originally sent authentication data including the hour-old MFA token as password.
Dec 08 02:06:21 openvpn-vtun0[29642]: test-user/xxx.xxx.245.171:35844 Timers: ping 5, ping-restart 600 Dec 08 02:06:21 openvpn-vtun0[29642]: test-user/xxx.xxx.245.171:35844 Protocol options: protocol-flags cc-exit tls-ekm dyn-tls-crypt Dec 08 03:05:02 openvpn-vtun0[29642]: test-user/xxx.xxx.245.171:35844 TLS: soft reset sec=3523/3523 bytes=116235/-1 pkts=1640/0 Dec 08 03:05:02 openvpn-vtun0[29642]: test-user/xxx.xxx.245.171:35844 VERIFY OK: depth=1, C=US, ST=MA, L=Boston, O=TEST, CN=CA Dec 08 03:05:02 openvpn-vtun0[29642]: test-user/xxx.xxx.245.171:35844 VERIFY OK: depth=0, C=US, ST=MA, L=Boston, O=TEST, CN=test-user Dec 08 03:05:02 openvpn-vtun0[29642]: test-user/xxx.xxx.245.171:35844 peer info: IV_VER=2.6.12 Dec 08 03:05:02 openvpn-vtun0[29642]: test-user/xxx.xxx.245.171:35844 peer info: IV_PLAT=linux Dec 08 03:05:02 openvpn-vtun0[29642]: test-user/xxx.xxx.245.171:35844 peer info: IV_TCPNL=1 Dec 08 03:05:02 openvpn-vtun0[29642]: test-user/xxx.xxx.245.171:35844 peer info: IV_MTU=1600 Dec 08 03:05:02 openvpn[29642]: OTP-AUTH: authentication failed for username xxxxxx remote xxx.xxx.245.171:35844
Config stanza:
set openvpn vtun0 hash 'sha512' set openvpn vtun0 keep-alive failure-count '60' set openvpn vtun0 keep-alive interval '5' set openvpn vtun0 local-host 'xxx.xxx.1.2' set openvpn vtun0 local-port '1194' set openvpn vtun0 mode 'server' set openvpn vtun0 persistent-tunnel set openvpn vtun0 protocol 'udp' set openvpn vtun0 server client xxxxxx set openvpn vtun0 server client xxxxxx set openvpn vtun0 server client xxxxxx set openvpn vtun0 server client xxxxxx set openvpn vtun0 server client xxxxxx set openvpn vtun0 server client xxxxxx set openvpn vtun0 server client xxxxxx set openvpn vtun0 server client xxxxxx set openvpn vtun0 server client-ip-pool start 'xxx.xxx.31.2' set openvpn vtun0 server client-ip-pool stop 'xxx.xxx.31.14' set openvpn vtun0 server client-ip-pool subnet-mask 'xxx.xxx.255.240' set openvpn vtun0 server domain-name xxxxxx set openvpn vtun0 server mfa totp challenge 'disable' set openvpn vtun0 server name-server 'xxx.xxx.31.1' set openvpn vtun0 server push-route xxx.xxx.0.0/16 set openvpn vtun0 server push-route xxx.xxx.0.0/16 set openvpn vtun0 server push-route xxx.xxx.0.0/16 set openvpn vtun0 server reject-unconfigured-clients set openvpn vtun0 server subnet 'xxx.xxx.31.0/28' set openvpn vtun0 server topology 'subnet' set openvpn vtun0 tls ca-certificate 'ovpn-ca' set openvpn vtun0 tls certificate 'ovpn-srv' set openvpn vtun0 tls dh-params 'ovpn-dh' set openvpn vtun0 use-lzo-compression
the client connection uses the CN from the certificate as the username and prompts the user for a password at sign-in which accepts the MFA token (client is Arch Linux utilizing NetworkManager).
When setting
set openvpn vtun0 server mfa totp challenge 'enable'
the client is unable to connect altogether. When using the "disable" option then the initial connection works but users are kicked-off after an hour for failing authentication since the old MFA token is re-submitted as the password.