"bypass_dhcp" doesn't seem to have done the trick; or, at least, "bypass_dhcp" on its own hasn't worked. I suspect I'm missing something.
Here's the current config file on my router:
root@router:/etc/config# cat openvpn
config 'openvpn' 'samplevpnconfig'
option 'enable' '1'
option 'port' '1194'
option 'proto' 'udp'
option 'dev' 'tun'
option 'client_to_client' '1'
option 'keepalive' '10 120'
option 'comp_lzo' '1'
option 'persist_key' '1'
option 'persist_tun' '1'
option 'verb' '4'
option 'mute' '20'
option 'ifconfig_pool_persist' '/tmp/ipp.txt'
option 'status' '/tmp/openvpn-status.log'
option 'ca' '/etc/openvpn/ca.crt'
option 'cert' '/etc/openvpn/server.crt'
option 'key' '/etc/openvpn/server.key'
option 'dh' '/etc/openvpn/dh2048.pem'
option 'server' '192.168.30.0 255.255.255.0'
list 'push' 'route 192.168.20.0 255.255.255.0'
list 'push' 'dhcp-option DNS 192.168.20.3'
list 'push' 'dhcp-option DOMAIN lan'
list 'push' 'redirect-gateway def1 bypass_dhcp'
Here's the log file from the OpenVPN client on my laptop, when connecting to my router:
Thu Aug 14 06:51:48 2014 us=29688 Current Parameter Settings:
Thu Aug 14 06:51:48 2014 us=29688 config = '2BC.ovpn'
Thu Aug 14 06:51:48 2014 us=29688 mode = 0
Thu Aug 14 06:51:48 2014 us=29688 show_ciphers = DISABLED
Thu Aug 14 06:51:48 2014 us=29688 show_digests = DISABLED
Thu Aug 14 06:51:48 2014 us=29688 show_engines = DISABLED
Thu Aug 14 06:51:48 2014 us=29688 genkey = DISABLED
Thu Aug 14 06:51:48 2014 us=29688 key_pass_file = '[UNDEF]'
Thu Aug 14 06:51:48 2014 us=29688 show_tls_ciphers = DISABLED
Thu Aug 14 06:51:48 2014 us=29688 Connection profiles [default]:
Thu Aug 14 06:51:48 2014 us=29688 NOTE: --mute triggered...
Thu Aug 14 06:51:48 2014 us=29688 275 variation(s) on previous 10 message(s) suppressed by --mute
Thu Aug 14 06:51:48 2014 us=29688 OpenVPN 2.3.4 x86_64-w64-mingw32 [SSL (OpenSSL)] [LZO] [PKCS11] [IPv6] built on Jun 5 2014
Thu Aug 14 06:51:48 2014 us=29688 library versions: OpenSSL 1.0.1h 5 Jun 2014, LZO 2.05
Enter Management Password:
Thu Aug 14 06:51:48 2014 us=29688 MANAGEMENT: TCP Socket listening on [AF_INET]127.0.0.1:25340
Thu Aug 14 06:51:48 2014 us=29688 Need hold release from management interface, waiting...
Thu Aug 14 06:51:48 2014 us=483312 MANAGEMENT: Client connected from [AF_INET]127.0.0.1:25340
Thu Aug 14 06:51:48 2014 us=592694 MANAGEMENT: CMD 'state on'
Thu Aug 14 06:51:48 2014 us=592694 MANAGEMENT: CMD 'log all on'
Thu Aug 14 06:51:48 2014 us=701967 MANAGEMENT: CMD 'hold off'
Thu Aug 14 06:51:48 2014 us=717592 MANAGEMENT: CMD 'hold release'
Thu Aug 14 06:51:49 2014 us=45719 LZO compression initialized
Thu Aug 14 06:51:49 2014 us=45719 Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]
Thu Aug 14 06:51:49 2014 us=45719 Socket Buffers: R=[65536->65536] S=[64512->64512]
Thu Aug 14 06:51:49 2014 us=45719 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ]
Thu Aug 14 06:51:49 2014 us=45719 Local Options String: 'V4,dev-type tun,link-mtu 1542,tun-mtu 1500,proto UDPv4,comp-lzo,cipher BF-CBC,auth SHA1,keysize 128,key-method 2,tls-client'
Thu Aug 14 06:51:49 2014 us=45719 Expected Remote Options String: 'V4,dev-type tun,link-mtu 1542,tun-mtu 1500,proto UDPv4,comp-lzo,cipher BF-CBC,auth SHA1,keysize 128,key-method 2,tls-server'
Thu Aug 14 06:51:49 2014 us=45719 Local Options hash (VER=V4): '41690919'
Thu Aug 14 06:51:49 2014 us=45719 Expected Remote Options hash (VER=V4): '530fdded'
Thu Aug 14 06:51:49 2014 us=45719 UDPv4 link local: [undef]
Thu Aug 14 06:51:49 2014 us=45719 UDPv4 link remote: [AF_INET]<redacted>:1194
Thu Aug 14 06:51:49 2014 us=45719 MANAGEMENT: >STATE:1407995509,WAIT,,,
Thu Aug 14 06:51:49 2014 us=61347 MANAGEMENT: >STATE:1407995509,AUTH,,,
Thu Aug 14 06:51:49 2014 us=61347 TLS: Initial packet from [AF_INET]<redacted>:1194, sid=f5981c34 19f57c54
Thu Aug 14 06:51:50 2014 us=170983 VERIFY OK: depth=1, C=UK, ST=London, L=London, O=OpenWRT, OU=OpenWRT, CN=OpenWRT CA, name=OpenWRT, emailAddress=me@myhost.mydomain
Thu Aug 14 06:51:50 2014 us=170983 VERIFY OK: nsCertType=SERVER
Thu Aug 14 06:51:50 2014 us=170983 VERIFY OK: depth=0, C=UK, ST=London, L=London, O=OpenWRT, OU=OpenWRT, CN=server, name=OpenWRT, emailAddress=me@myhost.mydomain
Thu Aug 14 06:51:51 2014 us=170986 NOTE: Options consistency check may be skewed by version differences
Thu Aug 14 06:51:51 2014 us=170986 WARNING: 'version' is used inconsistently, local='version V4', remote='version V0 UNDEF'
Thu Aug 14 06:51:51 2014 us=170986 WARNING: 'dev-type' is present in local config but missing in remote config, local='dev-type tun'
Thu Aug 14 06:51:51 2014 us=170986 WARNING: 'link-mtu' is present in local config but missing in remote config, local='link-mtu 1542'
Thu Aug 14 06:51:51 2014 us=170986 WARNING: 'tun-mtu' is present in local config but missing in remote config, local='tun-mtu 1500'
Thu Aug 14 06:51:51 2014 us=170986 WARNING: 'comp-lzo' is present in local config but missing in remote config, local='comp-lzo'
Thu Aug 14 06:51:51 2014 us=170986 WARNING: 'cipher' is present in local config but missing in remote config, local='cipher BF-CBC'
Thu Aug 14 06:51:51 2014 us=170986 WARNING: 'auth' is present in local config but missing in remote config, local='auth SHA1'
Thu Aug 14 06:51:51 2014 us=170986 WARNING: 'keysize' is present in local config but missing in remote config, local='keysize 128'
Thu Aug 14 06:51:51 2014 us=170986 WARNING: 'key-method' is present in local config but missing in remote config, local='key-method 2'
Thu Aug 14 06:51:51 2014 us=170986 NOTE: --mute triggered...
Thu Aug 14 06:51:51 2014 us=170986 1 variation(s) on previous 10 message(s) suppressed by --mute
Thu Aug 14 06:51:51 2014 us=170986 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key
Thu Aug 14 06:51:51 2014 us=170986 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Aug 14 06:51:51 2014 us=170986 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key
Thu Aug 14 06:51:51 2014 us=170986 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Aug 14 06:51:51 2014 us=170986 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 2048 bit RSA
Thu Aug 14 06:51:51 2014 us=170986 [server] Peer Connection Initiated with [AF_INET]<redacted>:1194
Thu Aug 14 06:51:52 2014 us=374996 MANAGEMENT: >STATE:1407995512,GET_CONFIG,,,
Thu Aug 14 06:51:53 2014 us=578127 SENT CONTROL [server]: 'PUSH_REQUEST' (status=1)
Thu Aug 14 06:51:53 2014 us=593752 PUSH: Received control message: 'PUSH_REPLY,route 192.168.20.0 255.255.255.0,dhcp-option DNS 192.168.20.3,dhcp-option DOMAIN lan,redirect-gateway def1 bypass_dhcp,route 192.168.30.0 255.255.255.0,topology net30,ping 10,ping-restart 120,ifconfig 192.168.30.6 192.168.30.5'
Thu Aug 14 06:51:53 2014 us=593752 Options error: unknown --redirect-gateway flag: bypass_dhcp
Thu Aug 14 06:51:53 2014 us=593752 OPTIONS IMPORT: timers and/or timeouts modified
Thu Aug 14 06:51:53 2014 us=593752 OPTIONS IMPORT: --ifconfig/up options modified
Thu Aug 14 06:51:53 2014 us=593752 OPTIONS IMPORT: route options modified
Thu Aug 14 06:51:53 2014 us=593752 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
Thu Aug 14 06:51:53 2014 us=609305 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Thu Aug 14 06:51:53 2014 us=609305 MANAGEMENT: >STATE:1407995513,ASSIGN_IP,,192.168.30.6,
Thu Aug 14 06:51:53 2014 us=609305 open_tun, tt->ipv6=0
Thu Aug 14 06:51:53 2014 us=624920 TAP-WIN32 device [OpenVPN] opened: \\.\Global\{1A9D01CC-590C-4D12-B6C7-A974AEF4A715}.tap
Thu Aug 14 06:51:53 2014 us=624920 TAP-Windows Driver Version 9.9
Thu Aug 14 06:51:53 2014 us=624920 TAP-Windows MTU=1500
Thu Aug 14 06:51:53 2014 us=624920 Notified TAP-Windows driver to set a DHCP IP/netmask of 192.168.30.6/255.255.255.252 on interface {1A9D01CC-590C-4D12-B6C7-A974AEF4A715} [DHCP-serv: 192.168.30.5, lease-time: 31536000]
Thu Aug 14 06:51:53 2014 us=624920 DHCP option string: 0f036c61 6e0604c0 a81403
Thu Aug 14 06:51:53 2014 us=624920 Successful ARP Flush on interface [12] {1A9D01CC-590C-4D12-B6C7-A974AEF4A715}
Thu Aug 14 06:51:58 2014 us=875969 TEST ROUTES: 2/2 succeeded len=2 ret=1 a=0 u/d=up
Thu Aug 14 06:51:58 2014 us=875969 MANAGEMENT: >STATE:1407995518,ADD_ROUTES,,,
Thu Aug 14 06:51:58 2014 us=875969 C:\WINDOWS\system32\route.exe ADD 192.168.20.0 MASK 255.255.255.0 192.168.30.5
Thu Aug 14 06:51:58 2014 us=875969 Route addition via IPAPI succeeded [adaptive]
Thu Aug 14 06:51:58 2014 us=875969 C:\WINDOWS\system32\route.exe ADD 192.168.30.0 MASK 255.255.255.0 192.168.30.5
Thu Aug 14 06:51:58 2014 us=875969 Route addition via IPAPI succeeded [adaptive]
Thu Aug 14 06:51:58 2014 us=875969 Initialization Sequence Completed
Thu Aug 14 06:51:58 2014 us=875969 MANAGEMENT: >STATE:1407995518,CONNECTED,SUCCESS,192.168.30.6,<redacted>
In the above log, "<redacted>" replaces the public IP address of the router.
As a comparison, here's the log file generated when connecting to the EC2 Appliance, which does route traffic as desired:
Thu Aug 14 06:43:31 2014 OpenVPN 2.3.4 x86_64-w64-mingw32 [SSL (OpenSSL)] [LZO] [PKCS11] [IPv6] built on Jun 5 2014
Thu Aug 14 06:43:31 2014 library versions: OpenSSL 1.0.1h 5 Jun 2014, LZO 2.05
Enter Management Password:
Thu Aug 14 06:43:31 2014 MANAGEMENT: TCP Socket listening on [AF_INET]127.0.0.1:25342
Thu Aug 14 06:43:31 2014 Need hold release from management interface, waiting...
Thu Aug 14 06:43:32 2014 MANAGEMENT: Client connected from [AF_INET]127.0.0.1:25342
Thu Aug 14 06:43:32 2014 MANAGEMENT: CMD 'state on'
Thu Aug 14 06:43:32 2014 MANAGEMENT: CMD 'log all on'
Thu Aug 14 06:43:32 2014 MANAGEMENT: CMD 'hold off'
Thu Aug 14 06:43:32 2014 MANAGEMENT: CMD 'hold release'
Thu Aug 14 06:43:35 2014 MANAGEMENT: CMD 'username "Auth" "openvpn"'
Thu Aug 14 06:43:35 2014 MANAGEMENT: CMD 'password [...]'
Thu Aug 14 06:43:35 2014 Control Channel Authentication: tls-auth using INLINE static key file
Thu Aug 14 06:43:35 2014 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Aug 14 06:43:35 2014 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Aug 14 06:43:35 2014 Socket Buffers: R=[65536->100000] S=[64512->100000]
Thu Aug 14 06:43:35 2014 MANAGEMENT: >STATE:1407995015,RESOLVE,,,
Thu Aug 14 06:43:35 2014 UDPv4 link local: [undef]
Thu Aug 14 06:43:35 2014 UDPv4 link remote: [AF_INET]<redacted>:1194
Thu Aug 14 06:43:35 2014 MANAGEMENT: >STATE:1407995015,WAIT,,,
Thu Aug 14 06:43:36 2014 MANAGEMENT: >STATE:1407995016,AUTH,,,
Thu Aug 14 06:43:36 2014 TLS: Initial packet from [AF_INET]<redacted>:1194, sid=8abaa864 afa12e39
Thu Aug 14 06:43:36 2014 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
Thu Aug 14 06:43:36 2014 VERIFY OK: depth=1, CN=OpenVPN CA
Thu Aug 14 06:43:36 2014 VERIFY OK: nsCertType=SERVER
Thu Aug 14 06:43:36 2014 VERIFY OK: depth=0, CN=OpenVPN Server
Thu Aug 14 06:43:38 2014 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key
Thu Aug 14 06:43:38 2014 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Aug 14 06:43:38 2014 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key
Thu Aug 14 06:43:38 2014 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Aug 14 06:43:38 2014 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 2048 bit RSA
Thu Aug 14 06:43:38 2014 [OpenVPN Server] Peer Connection Initiated with [AF_INET]<redacted>:1194
Thu Aug 14 06:43:39 2014 MANAGEMENT: >STATE:1407995019,GET_CONFIG,,,
Thu Aug 14 06:43:40 2014 SENT CONTROL [OpenVPN Server]: 'PUSH_REQUEST' (status=1)
Thu Aug 14 06:43:40 2014 PUSH: Received control message: 'PUSH_REPLY,explicit-exit-notify,topology subnet,route-delay 5 30,dhcp-pre-release,dhcp-renew,dhcp-release,route-metric 101,ping 12,ping-restart 50,auth-token SESS_ID,comp-lzo yes,redirect-gateway def1,redirect-gateway bypass-dhcp,redirect-gateway autolocal,route-gateway 172.27.232.1,dhcp-option DNS 8.8.8.8,dhcp-option DNS 8.8.4.4,register-dns,block-ipv6,ifconfig 172.27.232.32 255.255.248.0'
Thu Aug 14 06:43:40 2014 Option 'explicit-exit-notify' in [PUSH-OPTIONS]:1 is ignored by previous <connection> blocks
Thu Aug 14 06:43:40 2014 Unrecognized option or missing parameter(s) in [PUSH-OPTIONS]:19: block-ipv6 (2.3.4)
Thu Aug 14 06:43:40 2014 OPTIONS IMPORT: timers and/or timeouts modified
Thu Aug 14 06:43:40 2014 OPTIONS IMPORT: explicit notify parm(s) modified
Thu Aug 14 06:43:40 2014 OPTIONS IMPORT: LZO parms modified
Thu Aug 14 06:43:40 2014 OPTIONS IMPORT: --ifconfig/up options modified
Thu Aug 14 06:43:40 2014 OPTIONS IMPORT: route options modified
Thu Aug 14 06:43:40 2014 OPTIONS IMPORT: route-related options modified
Thu Aug 14 06:43:40 2014 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
Thu Aug 14 06:43:40 2014 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Thu Aug 14 06:43:40 2014 MANAGEMENT: >STATE:1407995020,ASSIGN_IP,,172.27.232.32,
Thu Aug 14 06:43:40 2014 open_tun, tt->ipv6=0
Thu Aug 14 06:43:40 2014 TAP-WIN32 device [OpenVPN] opened: \\.\Global\{1A9D01CC-590C-4D12-B6C7-A974AEF4A715}.tap
Thu Aug 14 06:43:40 2014 TAP-Windows Driver Version 9.9
Thu Aug 14 06:43:40 2014 Set TAP-Windows TUN subnet mode network/local/netmask = 172.27.232.0/172.27.232.32/255.255.248.0 [SUCCEEDED]
Thu Aug 14 06:43:40 2014 Notified TAP-Windows driver to set a DHCP IP/netmask of 172.27.232.32/255.255.248.0 on interface {1A9D01CC-590C-4D12-B6C7-A974AEF4A715} [DHCP-serv: 172.27.239.254, lease-time: 31536000]
Thu Aug 14 06:43:40 2014 Successful ARP Flush on interface [12] {1A9D01CC-590C-4D12-B6C7-A974AEF4A715}
Thu Aug 14 06:43:41 2014 TAP: DHCP address released
Thu Aug 14 06:43:48 2014 TAP: DHCP address renewal succeeded
Thu Aug 14 06:43:53 2014 TEST ROUTES: 1/1 succeeded len=0 ret=1 a=0 u/d=up
Thu Aug 14 06:43:53 2014 C:\WINDOWS\system32\route.exe ADD <redacted> MASK 255.255.255.255 30.146.64.1
Thu Aug 14 06:43:53 2014 ROUTE: CreateIpForwardEntry succeeded with dwForwardMetric1=25 and dwForwardType=4
Thu Aug 14 06:43:53 2014 Route addition via IPAPI succeeded [adaptive]
Thu Aug 14 06:43:53 2014 C:\WINDOWS\system32\route.exe ADD 159.68.62.11 MASK 255.255.255.255 30.146.64.1
Thu Aug 14 06:43:53 2014 ROUTE: CreateIpForwardEntry succeeded with dwForwardMetric1=25 and dwForwardType=4
Thu Aug 14 06:43:53 2014 Route addition via IPAPI succeeded [adaptive]
Thu Aug 14 06:43:53 2014 C:\WINDOWS\system32\route.exe ADD 0.0.0.0 MASK 128.0.0.0 172.27.232.1
Thu Aug 14 06:43:53 2014 Route addition via IPAPI succeeded [adaptive]
Thu Aug 14 06:43:53 2014 C:\WINDOWS\system32\route.exe ADD 128.0.0.0 MASK 128.0.0.0 172.27.232.1
Thu Aug 14 06:43:53 2014 Route addition via IPAPI succeeded [adaptive]
Thu Aug 14 06:43:53 2014 Initialization Sequence Completed
Thu Aug 14 06:43:53 2014 MANAGEMENT: >STATE:1407995033,CONNECTED,SUCCESS,172.27.232.32,<redacted>
Thu Aug 14 06:43:53 2014 Start net commands...
Thu Aug 14 06:43:53 2014 C:\WINDOWS\system32\net.exe stop dnscache
Thu Aug 14 06:43:58 2014 C:\WINDOWS\system32\net.exe start dnscache
Thu Aug 14 06:44:00 2014 C:\WINDOWS\system32\ipconfig.exe /flushdns
Thu Aug 14 06:44:00 2014 C:\WINDOWS\system32\ipconfig.exe /registerdns
Thu Aug 14 06:44:03 2014 End net commands...
Thu Aug 14 06:48:17 2014 SIGTERM received, sending exit notification to peer
Thu Aug 14 06:48:18 2014 C:\WINDOWS\system32\route.exe DELETE <redacted> MASK 255.255.255.255 30.146.64.1
Thu Aug 14 06:48:18 2014 Route deletion via IPAPI succeeded [adaptive]
Thu Aug 14 06:48:18 2014 C:\WINDOWS\system32\route.exe DELETE 159.68.62.11 MASK 255.255.255.255 30.146.64.1
Thu Aug 14 06:48:18 2014 Route deletion via IPAPI succeeded [adaptive]
Thu Aug 14 06:48:18 2014 C:\WINDOWS\system32\route.exe DELETE 0.0.0.0 MASK 128.0.0.0 172.27.232.1
Thu Aug 14 06:48:18 2014 Route deletion via IPAPI succeeded [adaptive]
Thu Aug 14 06:48:18 2014 C:\WINDOWS\system32\route.exe DELETE 128.0.0.0 MASK 128.0.0.0 172.27.232.1
Thu Aug 14 06:48:18 2014 Route deletion via IPAPI succeeded [adaptive]
Thu Aug 14 06:48:18 2014 Closing TUN/TAP interface
Thu Aug 14 06:48:18 2014 TAP: DHCP address released
Thu Aug 14 06:48:18 2014 SIGTERM[soft,exit-with-notification] received, process exiting
Thu Aug 14 06:48:18 2014 MANAGEMENT: >STATE:1407995298,EXITING,exit-with-notification,,
I suspect there might be a clue in the different lines which begin with "Received control message:"; I'm currently working through the documentation at
http://openvpn.net/index.php/open-source/documentation.html to find out more.