I tried this:
Server Config
compress lzo
push "compress lzo"
and nothing on the client with respect to compression.
However, when I do this, I see this in the log on the client side (I have underlined the interesting bits):
Sun Mar 18 12:01:59 2018 WARNING: 'link-mtu' is used inconsistently, local='link-mtu 1543', remote='link-mtu 1544'
Sun Mar 18 12:01:59 2018 WARNING: 'comp-lzo' is present in remote config but missing in local config, remote='comp-lzo'
Sun Mar 18 12:01:59 2018 Control Channel: TLSv1.2, cipher TLSv1/SSLv3 ECDHE-RSA-AES256-GCM-SHA384, 2048 bit RSA
...
Sun Mar 18 12:02:00 2018 SENT CONTROL [server]: 'PUSH_REQUEST' (status=1)
Sun Mar 18 12:02:00 2018 PUSH: Received control message: 'PUSH_REPLY,topology subnet,dhcp-option DNS 10.88.0.1,compress lzo,ping 10,ping-restart 120,ifconfig 10.88.1.1 255.255.0.0,peer-id 0,cipher AES-256-GCM'
1) The MTU inconsistency of 1543 versus 1544 is clear, it's because initially the client doesn't think it's going to do compression so it thinks there's going to be one less byte in the packets.
2) Then, the server pushes the 'compress lzo' directive
Is the client increasing the MTU to 1544 and use lzo compression when it gets the 'push compress lzo'? Or do I absolutely need to have 'compress lzo' in the client config files? In other words, is it impossible for me to push the compression type?
If this isn't the right way to do this, what's the proper way to control which compression to use from the server side?