2 * OpenVPN -- An application to securely tunnel IP networks
3 * over a single TCP/UDP port, with support for SSL/TLS-based
4 * session authentication and key exchange,
5 * packet encryption, packet authentication, and
8 * Copyright (C) 2002-2025 OpenVPN Inc <sales@openvpn.net>
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2
12 * as published by the Free Software Foundation.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License along
20 * with this program; if not, write to the Free Software Foundation, Inc.,
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
31 #include <systemd/sd-daemon.h>
36 #include "run_command.h"
49 #include "ssl_verify.h"
51 #include "tls_crypt.h"
53 #include "auth_token.h"
57 #include "tun_afunix.h"
62 static struct context
*static_context
; /* GLOBAL */
63 static const char *saved_pid_file_name
; /* GLOBAL */
66 * Crypto initialization flags
68 #define CF_LOAD_PERSISTED_PACKET_ID (1<<0)
69 #define CF_INIT_TLS_MULTI (1<<1)
70 #define CF_INIT_TLS_AUTH_STANDALONE (1<<2)
72 static void do_init_first_time(struct context
*c
);
74 static bool do_deferred_p2p_ncp(struct context
*c
);
77 context_clear(struct context
*c
)
83 context_clear_1(struct context
*c
)
89 context_clear_2(struct context
*c
)
95 context_clear_all_except_first_time(struct context
*c
)
97 const bool first_time_save
= c
->first_time
;
98 const struct context_persist cpsave
= c
->persist
;
100 c
->first_time
= first_time_save
;
105 * Pass tunnel endpoint and MTU parms to a user-supplied script.
106 * Used to execute the up/down script/plugins.
109 run_up_down(const char *command
,
110 const struct plugin_list
*plugins
,
116 const char *dev_type
,
118 const char *ifconfig_local
,
119 const char *ifconfig_remote
,
121 const char *signal_text
,
122 const char *script_type
,
125 struct gc_arena gc
= gc_new();
129 setenv_str(es
, "signal", signal_text
);
131 setenv_str(es
, "script_context", context
);
132 setenv_int(es
, "tun_mtu", tun_mtu
);
133 setenv_str(es
, "dev", arg
);
136 setenv_str(es
, "dev_type", dev_type
);
139 setenv_int(es
, "dev_idx", adapter_index
);
146 if (!ifconfig_remote
)
148 ifconfig_remote
= "";
155 if (plugin_defined(plugins
, plugin_type
))
157 struct argv argv
= argv_new();
161 arg
, tun_mtu
, ifconfig_local
, ifconfig_remote
, context
);
163 if (plugin_call(plugins
, plugin_type
, &argv
, NULL
, es
) != OPENVPN_PLUGIN_FUNC_SUCCESS
)
165 msg(M_FATAL
, "ERROR: up/down plugin call failed");
173 struct argv argv
= argv_new();
175 setenv_str(es
, "script_type", script_type
);
176 argv_parse_cmd(&argv
, command
);
177 argv_printf_cat(&argv
, "%s %d 0 %s %s %s", arg
, tun_mtu
,
178 ifconfig_local
, ifconfig_remote
, context
);
179 argv_msg(M_INFO
, &argv
);
180 openvpn_run_script(&argv
, es
, S_FATAL
, "--up/--down");
188 * Should be called after options->ce is modified at the top
189 * of a SIGUSR1 restart.
192 update_options_ce_post(struct options
*options
)
195 * In pull mode, we usually import --ping/--ping-restart parameters from
196 * the server. However we should also set an initial default --ping-restart
197 * for the period of time before we pull the --ping-restart parameter
201 && options
->ping_rec_timeout_action
== PING_UNDEF
202 && proto_is_dgram(options
->ce
.proto
))
204 options
->ping_rec_timeout
= PRE_PULL_INITIAL_PING_RESTART
;
205 options
->ping_rec_timeout_action
= PING_RESTART
;
209 #ifdef ENABLE_MANAGEMENT
211 management_callback_proxy_cmd(void *arg
, const char **p
)
213 struct context
*c
= arg
;
214 struct connection_entry
*ce
= &c
->options
.ce
;
215 struct gc_arena
*gc
= &c
->c2
.gc
;
219 if (streq(p
[1], "NONE"))
223 else if (p
[2] && p
[3])
225 if (streq(p
[1], "HTTP"))
227 struct http_proxy_options
*ho
;
228 if (ce
->proto
!= PROTO_TCP
&& ce
->proto
!= PROTO_TCP_CLIENT
)
230 msg(M_WARN
, "HTTP proxy support only works for TCP based connections");
233 ho
= init_http_proxy_options_once(&ce
->http_proxy_options
, gc
);
234 ho
->server
= string_alloc(p
[2], gc
);
235 ho
->port
= string_alloc(p
[3], gc
);
236 ho
->auth_retry
= (p
[4] && streq(p
[4], "nct") ? PAR_NCT
: PAR_ALL
);
239 else if (streq(p
[1], "SOCKS"))
241 ce
->socks_proxy_server
= string_alloc(p
[2], gc
);
242 ce
->socks_proxy_port
= string_alloc(p
[3], gc
);
248 msg(M_WARN
, "Bad proxy command");
251 ce
->flags
&= ~CE_MAN_QUERY_PROXY
;
257 ce_management_query_proxy(struct context
*c
)
259 const struct connection_list
*l
= c
->options
.connection_list
;
260 struct connection_entry
*ce
= &c
->options
.ce
;
269 struct buffer out
= alloc_buf_gc(256, &gc
);
270 buf_printf(&out
, ">PROXY:%u,%s,%s", (l
? l
->current
: 0) + 1,
271 (proto_is_udp(ce
->proto
) ? "UDP" : "TCP"), np(ce
->remote
));
272 management_notify_generic(management
, BSTR(&out
));
273 management
->persist
.special_state_msg
= BSTR(&out
);
275 ce
->flags
|= CE_MAN_QUERY_PROXY
;
276 while (ce
->flags
& CE_MAN_QUERY_PROXY
)
278 management_event_loop_n_seconds(management
, 1);
285 management
->persist
.special_state_msg
= NULL
;
293 * This method sends a custom control channel message
295 * This will write the control message
297 * command parm1,parm2,...
299 * to the control channel.
301 * @param arg The context struct
302 * @param command The command being sent
303 * @param parameters the parameters to the command
304 * @return if sending was successful
307 management_callback_send_cc_message(void *arg
,
309 const char *parameters
)
311 struct context
*c
= (struct context
*) arg
;
312 size_t len
= strlen(command
) + 1 + strlen(parameters
) + 1;
313 if (len
> PUSH_BUNDLE_SIZE
)
318 struct gc_arena gc
= gc_new();
319 struct buffer buf
= alloc_buf_gc(len
, &gc
);
320 ASSERT(buf_printf(&buf
, "%s", command
));
323 ASSERT(buf_printf(&buf
, ",%s", parameters
));
325 bool status
= send_control_channel_string(c
, BSTR(&buf
), D_PUSH
);
332 management_callback_remote_entry_count(void *arg
)
335 struct context
*c
= (struct context
*) arg
;
336 struct connection_list
*l
= c
->options
.connection_list
;
342 management_callback_remote_entry_get(void *arg
, unsigned int index
, char **remote
)
347 struct context
*c
= (struct context
*) arg
;
348 struct connection_list
*l
= c
->options
.connection_list
;
353 struct connection_entry
*ce
= l
->array
[index
];
354 const char *proto
= proto2ascii(ce
->proto
, ce
->af
, false);
355 const char *status
= (ce
->flags
& CE_DISABLED
) ? "disabled" : "enabled";
357 /* space for output including 3 commas and a nul */
358 int len
= strlen(ce
->remote
) + strlen(ce
->remote_port
) + strlen(proto
)
359 + strlen(status
) + 3 + 1;
360 char *out
= malloc(len
);
361 check_malloc_return(out
);
363 snprintf(out
, len
, "%s,%s,%s,%s", ce
->remote
, ce
->remote_port
, proto
, status
);
369 msg(M_WARN
, "Out of bounds index in management query for remote entry: index = %u", index
);
376 management_callback_remote_cmd(void *arg
, const char **p
)
378 struct context
*c
= (struct context
*) arg
;
379 struct connection_entry
*ce
= &c
->options
.ce
;
381 if (p
[1] && ((ce
->flags
>>CE_MAN_QUERY_REMOTE_SHIFT
)&CE_MAN_QUERY_REMOTE_MASK
) == CE_MAN_QUERY_REMOTE_QUERY
)
384 if (!strcmp(p
[1], "ACCEPT"))
386 flags
= CE_MAN_QUERY_REMOTE_ACCEPT
;
389 else if (!strcmp(p
[1], "SKIP"))
391 flags
= CE_MAN_QUERY_REMOTE_SKIP
;
393 c
->options
.ce_advance_count
= (p
[2]) ? atoi(p
[2]) : 1;
395 else if (!strcmp(p
[1], "MOD") && p
[2] && p
[3])
397 if (strlen(p
[2]) < RH_HOST_LEN
&& strlen(p
[3]) < RH_PORT_LEN
)
399 struct remote_host_store
*rhs
= c
->options
.rh_store
;
402 ALLOC_OBJ_CLEAR_GC(rhs
, struct remote_host_store
, &c
->options
.gc
);
403 c
->options
.rh_store
= rhs
;
405 strncpynt(rhs
->host
, p
[2], RH_HOST_LEN
);
406 strncpynt(rhs
->port
, p
[3], RH_PORT_LEN
);
408 ce
->remote
= rhs
->host
;
409 ce
->remote_port
= rhs
->port
;
410 flags
= CE_MAN_QUERY_REMOTE_MOD
;
416 ce
->flags
&= ~(CE_MAN_QUERY_REMOTE_MASK
<<CE_MAN_QUERY_REMOTE_SHIFT
);
417 ce
->flags
|= ((flags
&CE_MAN_QUERY_REMOTE_MASK
)<<CE_MAN_QUERY_REMOTE_SHIFT
);
424 ce_management_query_remote(struct context
*c
)
426 struct gc_arena gc
= gc_new();
427 volatile struct connection_entry
*ce
= &c
->options
.ce
;
428 int ce_changed
= true; /* presume the connection entry will be changed */
433 struct buffer out
= alloc_buf_gc(256, &gc
);
435 buf_printf(&out
, ">REMOTE:%s,%s,%s", np(ce
->remote
), ce
->remote_port
,
436 proto2ascii(ce
->proto
, ce
->af
, false));
437 management_notify_generic(management
, BSTR(&out
));
438 management
->persist
.special_state_msg
= BSTR(&out
);
440 ce
->flags
&= ~(CE_MAN_QUERY_REMOTE_MASK
<< CE_MAN_QUERY_REMOTE_SHIFT
);
441 ce
->flags
|= (CE_MAN_QUERY_REMOTE_QUERY
<< CE_MAN_QUERY_REMOTE_SHIFT
);
442 while (((ce
->flags
>> CE_MAN_QUERY_REMOTE_SHIFT
)
443 & CE_MAN_QUERY_REMOTE_MASK
) == CE_MAN_QUERY_REMOTE_QUERY
)
445 management_event_loop_n_seconds(management
, 1);
448 ce_changed
= false; /* connection entry have not been set */
452 management
->persist
.special_state_msg
= NULL
;
458 /* If it is likely a connection entry was modified,
459 * check what changed in the flags and that it was not skipped
461 const int flags
= ((ce
->flags
>> CE_MAN_QUERY_REMOTE_SHIFT
)
462 & CE_MAN_QUERY_REMOTE_MASK
);
463 ce_changed
= (flags
!= CE_MAN_QUERY_REMOTE_SKIP
);
467 #endif /* ENABLE_MANAGEMENT */
470 * Initialize and possibly randomize the connection list.
472 * Applies the Fisher-Yates shuffle algorithm to ensure all permutations
473 * are equally probable, thereby eliminating shuffling bias.
475 * The algorithm randomly selects an element from the unshuffled portion
476 * and places it at position i. There's only one way to obtain each
477 * permutation through these swaps. This guarantees that each permutation
478 * occurs with equal probability in theory.
481 init_connection_list(struct context
*c
)
483 struct connection_list
*l
= c
->options
.connection_list
;
486 if (c
->options
.remote_random
)
489 for (i
= l
->len
- 1; i
> 0; --i
)
491 const int j
= get_random() % (i
+ 1);
494 struct connection_entry
*tmp
;
496 l
->array
[i
] = l
->array
[j
];
504 * Clear the remote address list
507 clear_remote_addrlist(struct link_socket_addr
*lsa
, bool free
)
509 if (lsa
->remote_list
&& free
)
511 freeaddrinfo(lsa
->remote_list
);
513 lsa
->remote_list
= NULL
;
514 lsa
->current_remote
= NULL
;
518 * Increment to next connection entry
521 next_connection_entry(struct context
*c
)
523 struct connection_list
*l
= c
->options
.connection_list
;
525 struct connection_entry
*ce
;
531 if (c
->options
.no_advance
&& l
->current
>= 0)
533 c
->options
.no_advance
= false;
537 /* Check if there is another resolved address to try for
538 * the current connection */
539 if (c
->c1
.link_socket_addrs
[0].current_remote
540 && c
->c1
.link_socket_addrs
[0].current_remote
->ai_next
541 && !c
->options
.advance_next_remote
)
543 c
->c1
.link_socket_addrs
[0].current_remote
=
544 c
->c1
.link_socket_addrs
[0].current_remote
->ai_next
;
548 c
->options
.advance_next_remote
= false;
549 /* FIXME (schwabe) fix the persist-remote-ip option for real,
550 * this is broken probably ever since connection lists and multiple
553 if (!c
->options
.persist_remote_ip
)
555 /* Connection entry addrinfo objects might have been
556 * resolved earlier but the entry itself might have been
557 * skipped by management on the previous loop.
558 * If so, clear the addrinfo objects as close_instance does
560 if (c
->c1
.link_socket_addrs
[0].remote_list
)
562 clear_remote_addrlist(&c
->c1
.link_socket_addrs
[0],
563 !c
->options
.resolve_in_advance
);
566 /* close_instance should have cleared the addrinfo objects */
567 ASSERT(c
->c1
.link_socket_addrs
[0].current_remote
== NULL
);
568 ASSERT(c
->c1
.link_socket_addrs
[0].remote_list
== NULL
);
572 c
->c1
.link_socket_addrs
[0].current_remote
=
573 c
->c1
.link_socket_addrs
[0].remote_list
;
576 int advance_count
= 1;
578 /* If previous connection entry was skipped by management client
579 * with a count to advance by, apply it.
581 if (c
->options
.ce_advance_count
> 0)
583 advance_count
= c
->options
.ce_advance_count
;
587 * Increase the number of connection attempts
588 * If this is connect-retry-max * size(l)
592 c
->options
.unsuccessful_attempts
+= advance_count
;
593 l
->current
+= advance_count
;
595 if (l
->current
>= l
->len
)
597 l
->current
%= l
->len
;
600 msg(M_FATAL
, "No usable connection profiles are present");
606 c
->options
.ce_advance_count
= 1;
607 ce
= l
->array
[l
->current
];
609 if (ce
->flags
& CE_DISABLED
)
616 #ifdef ENABLE_MANAGEMENT
617 if (ce_defined
&& management
&& management_query_remote_enabled(management
))
619 /* allow management interface to override connection entry details */
620 ce_defined
= ce_management_query_remote(c
);
626 else if (ce_defined
&& management
&& management_query_proxy_enabled(management
))
628 ce_defined
= ce_management_query_proxy(c
);
635 } while (!ce_defined
);
637 /* Check if this connection attempt would bring us over the limit */
638 if (c
->options
.connect_retry_max
> 0
639 && c
->options
.unsuccessful_attempts
> (l
->len
* c
->options
.connect_retry_max
))
641 msg(M_FATAL
, "All connections have been connect-retry-max (%d) times unsuccessful, exiting",
642 c
->options
.connect_retry_max
);
644 update_options_ce_post(&c
->options
);
648 * Query for private key and auth-user-pass username/passwords
651 init_query_passwords(const struct context
*c
)
653 /* Certificate password input */
654 if (c
->options
.key_pass_file
)
656 pem_password_setup(c
->options
.key_pass_file
);
659 /* Auth user/pass input */
660 if (c
->options
.auth_user_pass_file
)
662 enable_auth_user_pass();
663 #ifdef ENABLE_MANAGEMENT
664 auth_user_pass_setup(c
->options
.auth_user_pass_file
,
665 c
->options
.auth_user_pass_file_inline
,
666 &c
->options
.sc_info
);
668 auth_user_pass_setup(c
->options
.auth_user_pass_file
,
669 c
->options
.auth_user_pass_file_inline
, NULL
);
675 * Initialize/Uninitialize HTTP or SOCKS proxy
679 uninit_proxy_dowork(struct context
*c
)
681 if (c
->c1
.http_proxy_owned
&& c
->c1
.http_proxy
)
683 http_proxy_close(c
->c1
.http_proxy
);
684 c
->c1
.http_proxy
= NULL
;
685 c
->c1
.http_proxy_owned
= false;
687 if (c
->c1
.socks_proxy_owned
&& c
->c1
.socks_proxy
)
689 socks_proxy_close(c
->c1
.socks_proxy
);
690 c
->c1
.socks_proxy
= NULL
;
691 c
->c1
.socks_proxy_owned
= false;
696 init_proxy_dowork(struct context
*c
)
698 bool did_http
= false;
700 uninit_proxy_dowork(c
);
702 if (c
->options
.ce
.http_proxy_options
)
704 c
->options
.ce
.http_proxy_options
->first_time
= c
->first_time
;
706 /* Possible HTTP proxy user/pass input */
707 c
->c1
.http_proxy
= http_proxy_new(c
->options
.ce
.http_proxy_options
);
708 if (c
->c1
.http_proxy
)
711 c
->c1
.http_proxy_owned
= true;
715 if (!did_http
&& c
->options
.ce
.socks_proxy_server
)
717 c
->c1
.socks_proxy
= socks_proxy_new(c
->options
.ce
.socks_proxy_server
,
718 c
->options
.ce
.socks_proxy_port
,
719 c
->options
.ce
.socks_proxy_authfile
);
720 if (c
->c1
.socks_proxy
)
722 c
->c1
.socks_proxy_owned
= true;
728 init_proxy(struct context
*c
)
730 init_proxy_dowork(c
);
734 uninit_proxy(struct context
*c
)
736 uninit_proxy_dowork(c
);
740 do_link_socket_addr_new(struct context
*c
)
742 ALLOC_ARRAY_CLEAR_GC(c
->c1
.link_socket_addrs
, struct link_socket_addr
,
743 c
->c1
.link_sockets_num
, &c
->gc
);
747 context_init_1(struct context
*c
)
751 packet_id_persist_init(&c
->c1
.pid_persist
);
753 init_connection_list(c
);
755 c
->c1
.link_sockets_num
= c
->options
.ce
.local_list
->len
;
757 do_link_socket_addr_new(c
);
759 #if defined(ENABLE_PKCS11)
763 pkcs11_initialize(true, c
->options
.pkcs11_pin_cache_period
);
764 for (i
= 0; i
<MAX_PARMS
&& c
->options
.pkcs11_providers
[i
] != NULL
; i
++)
766 pkcs11_addProvider(c
->options
.pkcs11_providers
[i
], c
->options
.pkcs11_protected_authentication
[i
],
767 c
->options
.pkcs11_private_mode
[i
], c
->options
.pkcs11_cert_private
[i
]);
772 #if 0 /* test get_user_pass with GET_USER_PASS_NEED_OK flag */
775 * In the management interface, you can okay the request by entering "needok token-insertion-request ok"
779 strcpy(up
.username
, "Please insert your cryptographic token"); /* put the high-level message in up.username */
780 get_user_pass(&up
, NULL
, "token-insertion-request", GET_USER_PASS_MANAGEMENT
|GET_USER_PASS_NEED_OK
);
781 msg(M_INFO
, "RET:%s", up
.password
); /* will return the third argument to management interface
782 * 'needok' command, usually 'ok' or 'cancel'. */
786 #ifdef ENABLE_SYSTEMD
787 /* We can report the PID via getpid() to systemd here as OpenVPN will not
788 * do any fork due to daemon() a future call.
789 * See possibly_become_daemon() [init.c] for more details.
791 sd_notifyf(0, "READY=1\nSTATUS=Pre-connection initialization successful\nMAINPID=%lu",
792 (unsigned long) getpid());
798 context_gc_free(struct context
*c
)
801 gc_free(&c
->options
.gc
);
808 close_port_share(void)
812 port_share_close(port_share
);
818 init_port_share(struct context
*c
)
820 if (!port_share
&& (c
->options
.port_share_host
&& c
->options
.port_share_port
))
822 port_share
= port_share_open(c
->options
.port_share_host
,
823 c
->options
.port_share_port
,
824 c
->c2
.frame
.buf
.payload_size
,
825 c
->options
.port_share_journal_dir
);
826 if (port_share
== NULL
)
828 msg(M_FATAL
, "Fatal error: Port sharing failed");
833 #endif /* if PORT_SHARE */
840 crypto_init_dmalloc();
845 * Initialize random number seed. random() is only used
846 * when "weak" random numbers are acceptable.
847 * SSL library routines are always used when cryptographically
848 * strong random numbers are required.
851 if (!gettimeofday(&tv
, NULL
))
853 const unsigned int seed
= (unsigned int) tv
.tv_sec
^ tv
.tv_usec
;
857 error_reset(); /* initialize error.c */
858 reset_check_status(); /* initialize status check code in socket.c */
864 #ifdef OPENVPN_DEBUG_COMMAND_LINE
867 for (i
= 0; i
< argc
; ++i
)
869 msg(M_INFO
, "argv[%d] = '%s'", i
, argv
[i
]);
883 #ifdef IFCONFIG_POOL_TEST
884 ifconfig_pool_test(0x0A010004, 0x0A0100FF);
895 struct gc_arena gc
= gc_new();
896 const char *fn
= gen_path("foo",
905 #ifdef STATUS_PRINTF_TEST
907 struct gc_arena gc
= gc_new();
908 const char *tmp_file
= platform_create_temp_file("/tmp", "foo", &gc
);
909 struct status_output
*so
= status_open(tmp_file
, 0, -1, NULL
, STATUS_OUTPUT_WRITE
);
910 status_printf(so
, "%s", "foo");
911 status_printf(so
, "%s", "bar");
912 if (!status_close(so
))
914 msg(M_WARN
, "STATUS_PRINTF_TEST: %s: write error", tmp_file
);
924 mstats_open("/dev/shm/mstats.dat");
925 for (i
= 0; i
< 30; ++i
)
927 mmap_stats
->n_clients
+= 1;
928 mmap_stats
->link_write_bytes
+= 8;
929 mmap_stats
->link_read_bytes
+= 16;
953 #if defined(MEASURE_TLS_HANDSHAKE_STATS)
954 show_tls_performance_stats();
959 init_verb_mute(struct context
*c
, unsigned int flags
)
961 if (flags
& IVM_LEVEL_1
)
963 /* set verbosity and mute levels */
964 set_check_status(D_LINK_ERRORS
, D_READ_WRITE
);
965 set_debug_level(c
->options
.verbosity
, SDL_CONSTRAIN
);
966 set_mute_cutoff(c
->options
.mute
);
969 /* special D_LOG_RW mode */
970 if (flags
& IVM_LEVEL_2
)
972 c
->c2
.log_rw
= (check_debug_level(D_LOG_RW
) && !check_debug_level(D_LOG_RW
+ 1));
977 * Possibly set --dev based on --dev-node.
978 * For example, if --dev-node /tmp/foo/tun, and --dev undefined,
982 init_options_dev(struct options
*options
)
984 if (!options
->dev
&& options
->dev_node
)
986 /* POSIX basename() implementations may modify its arguments */
987 char *dev_node
= string_alloc(options
->dev_node
, NULL
);
988 options
->dev
= basename(dev_node
);
993 print_openssl_info(const struct options
*options
)
996 * OpenSSL info print mode?
998 if (options
->show_ciphers
|| options
->show_digests
|| options
->show_engines
999 || options
->show_tls_ciphers
|| options
->show_curves
)
1001 if (options
->show_ciphers
)
1003 show_available_ciphers();
1005 if (options
->show_digests
)
1007 show_available_digests();
1009 if (options
->show_engines
)
1011 show_available_engines();
1013 if (options
->show_tls_ciphers
)
1015 show_available_tls_ciphers(options
->cipher_list
,
1016 options
->cipher_list_tls13
,
1017 options
->tls_cert_profile
);
1019 if (options
->show_curves
)
1021 show_available_curves();
1029 * Static pre-shared key generation mode?
1032 do_genkey(const struct options
*options
)
1034 /* should we disable paging? */
1035 if (options
->mlock
&& (options
->genkey
))
1037 platform_mlockall(true);
1041 * We do not want user to use --genkey with --secret. In the transistion
1042 * phase we for secret.
1044 if (options
->genkey
&& options
->genkey_type
!= GENKEY_SECRET
1045 && options
->shared_secret_file
)
1047 msg(M_USAGE
, "Using --genkey type with --secret filename is "
1048 "not supported. Use --genkey type filename instead.");
1050 if (options
->genkey
&& options
->genkey_type
== GENKEY_SECRET
)
1053 const char *genkey_filename
= options
->genkey_filename
;
1054 if (options
->shared_secret_file
&& options
->genkey_filename
)
1056 msg(M_USAGE
, "You must provide a filename to either --genkey "
1057 "or --secret, not both");
1061 * Copy filename from shared_secret_file to genkey_filename to support
1062 * the old --genkey --secret foo.file syntax.
1064 if (options
->shared_secret_file
)
1066 msg(M_WARN
, "WARNING: Using --genkey --secret filename is "
1067 "DEPRECATED. Use --genkey secret filename instead.");
1068 genkey_filename
= options
->shared_secret_file
;
1071 nbits_written
= write_key_file(2, genkey_filename
);
1072 if (nbits_written
< 0)
1074 msg(M_FATAL
, "Failed to write key file");
1077 msg(D_GENKEY
| M_NOPREFIX
,
1078 "Randomly generated %d bit key written to %s", nbits_written
,
1079 options
->shared_secret_file
);
1082 else if (options
->genkey
&& options
->genkey_type
== GENKEY_TLS_CRYPTV2_SERVER
)
1084 tls_crypt_v2_write_server_key_file(options
->genkey_filename
);
1087 else if (options
->genkey
&& options
->genkey_type
== GENKEY_TLS_CRYPTV2_CLIENT
)
1089 if (!options
->tls_crypt_v2_file
)
1092 "--genkey tls-crypt-v2-client requires a server key to be set via --tls-crypt-v2 to create a client key");
1095 tls_crypt_v2_write_client_key_file(options
->genkey_filename
,
1096 options
->genkey_extra_data
, options
->tls_crypt_v2_file
,
1097 options
->tls_crypt_v2_file_inline
);
1100 else if (options
->genkey
&& options
->genkey_type
== GENKEY_AUTH_TOKEN
)
1102 auth_token_write_server_key_file(options
->genkey_filename
);
1112 * Persistent TUN/TAP device management mode?
1115 do_persist_tuntap(struct options
*options
, openvpn_net_ctx_t
*ctx
)
1117 if (!options
->persist_config
)
1122 /* sanity check on options for --mktun or --rmtun */
1123 notnull(options
->dev
, "TUN/TAP device (--dev)");
1124 if (options
->ce
.remote
|| options
->ifconfig_local
1125 || options
->ifconfig_remote_netmask
1126 || options
->shared_secret_file
1127 || options
->tls_server
|| options
->tls_client
1130 msg(M_FATAL
|M_OPTERR
,
1131 "options --mktun or --rmtun should only be used together with --dev");
1134 #if defined(ENABLE_DCO)
1135 if (dco_enabled(options
))
1137 /* creating a DCO interface via --mktun is not supported as it does not
1138 * make much sense. Since DCO is enabled by default, people may run into
1139 * this without knowing, therefore this case should be properly handled.
1141 * Disable DCO if --mktun was provided and print a message to let
1144 if (dev_type_enum(options
->dev
, options
->dev_type
) == DEV_TYPE_TUN
)
1146 msg(M_WARN
, "Note: --mktun does not support DCO. Creating TUN interface.");
1149 options
->disable_dco
= true;
1153 #ifdef ENABLE_FEATURE_TUN_PERSIST
1154 tuncfg(options
->dev
, options
->dev_type
, options
->dev_node
,
1155 options
->persist_mode
,
1156 options
->username
, options
->groupname
, &options
->tuntap_options
,
1158 if (options
->persist_mode
&& options
->lladdr
)
1160 set_lladdr(ctx
, options
->dev
, options
->lladdr
, NULL
);
1163 #else /* ifdef ENABLE_FEATURE_TUN_PERSIST */
1164 msg(M_FATAL
|M_OPTERR
,
1165 "options --mktun and --rmtun are not available on your operating "
1166 "system. Please check 'man tun' (or 'tap'), whether your system "
1167 "supports using 'ifconfig %s create' / 'destroy' to create/remove "
1168 "persistent tunnel interfaces.", options
->dev
);
1174 * Should we become a daemon?
1175 * Return true if we did it.
1178 possibly_become_daemon(const struct options
*options
)
1182 #ifdef ENABLE_SYSTEMD
1183 /* return without forking if we are running from systemd */
1184 if (sd_notify(0, "READY=0") > 0)
1190 if (options
->daemon
)
1192 /* Don't chdir immediately, but the end of the init sequence, if needed */
1194 #if defined(__APPLE__) && defined(__clang__)
1195 #pragma clang diagnostic push
1196 #pragma clang diagnostic ignored "-Wdeprecated-declarations"
1198 if (daemon(1, options
->log
) < 0)
1200 msg(M_ERR
, "daemon() failed or unsupported");
1202 #if defined(__APPLE__) && defined(__clang__)
1203 #pragma clang diagnostic pop
1205 restore_signal_state();
1208 set_std_files_to_null(true);
1217 * Actually do UID/GID downgrade, chroot and SELinux context switching, if requested.
1220 do_uid_gid_chroot(struct context
*c
, bool no_delay
)
1222 static const char why_not
[] = "will be delayed because of --client, --pull, or --up-delay";
1223 struct context_0
*c0
= c
->c0
;
1225 if (c0
&& !c0
->uid_gid_chroot_set
)
1227 /* chroot if requested */
1228 if (c
->options
.chroot_dir
)
1232 platform_chroot(c
->options
.chroot_dir
);
1234 else if (c
->first_time
)
1236 msg(M_INFO
, "NOTE: chroot %s", why_not
);
1240 /* set user and/or group if we want to setuid/setgid */
1241 if (c0
->uid_gid_specified
)
1245 platform_user_group_set(&c0
->platform_state_user
,
1246 &c0
->platform_state_group
,
1249 else if (c
->first_time
)
1251 msg(M_INFO
, "NOTE: UID/GID downgrade %s", why_not
);
1255 #ifdef ENABLE_MEMSTATS
1256 if (c
->first_time
&& c
->options
.memstats_fn
)
1258 mstats_open(c
->options
.memstats_fn
);
1262 #ifdef ENABLE_SELINUX
1263 /* Apply a SELinux context in order to restrict what OpenVPN can do
1264 * to _only_ what it is supposed to do after initialization is complete
1265 * (basically just network I/O operations). Doing it after chroot
1266 * requires /proc to be mounted in the chroot (which is annoying indeed
1267 * but doing it before requires more complex SELinux policies.
1269 if (c
->options
.selinux_context
)
1273 if (-1 == setcon(c
->options
.selinux_context
))
1275 msg(M_ERR
, "setcon to '%s' failed; is /proc accessible?", c
->options
.selinux_context
);
1279 msg(M_INFO
, "setcon to '%s' succeeded", c
->options
.selinux_context
);
1282 else if (c
->first_time
)
1284 msg(M_INFO
, "NOTE: setcon %s", why_not
);
1289 /* Privileges are going to be dropped by now (if requested), be sure
1290 * to prevent any future privilege dropping attempts from now on.
1294 c0
->uid_gid_chroot_set
= true;
1300 * Return common name in a way that is formatted for
1301 * prepending to msg() output.
1304 format_common_name(struct context
*c
, struct gc_arena
*gc
)
1306 struct buffer out
= alloc_buf_gc(256, gc
);
1307 if (c
->c2
.tls_multi
)
1309 buf_printf(&out
, "[%s] ", tls_common_name(c
->c2
.tls_multi
, false));
1315 pre_setup(const struct options
*options
)
1318 if (options
->exit_event_name
)
1320 win32_signal_open(&win32_signal
,
1322 options
->exit_event_name
,
1323 options
->exit_event_initial_state
);
1327 win32_signal_open(&win32_signal
,
1332 /* put a title on the top window bar */
1333 if (win32_signal
.mode
== WSO_MODE_CONSOLE
)
1335 window_title_save(&window_title
);
1336 window_title_generate(options
->config
);
1339 #endif /* ifdef _WIN32 */
1343 reset_coarse_timers(struct context
*c
)
1345 c
->c2
.coarse_timer_wakeup
= 0;
1349 * Initialise the server poll timeout timer
1350 * This timer is used in the http/socks proxy setup so it needs to be setup
1354 do_init_server_poll_timeout(struct context
*c
)
1357 if (c
->options
.ce
.connect_timeout
)
1359 event_timeout_init(&c
->c2
.server_poll_interval
, c
->options
.ce
.connect_timeout
, now
);
1367 do_init_timers(struct context
*c
, bool deferred
)
1370 reset_coarse_timers(c
);
1372 /* initialize inactivity timeout */
1373 if (c
->options
.inactivity_timeout
)
1375 event_timeout_init(&c
->c2
.inactivity_interval
, c
->options
.inactivity_timeout
, now
);
1378 /* initialize inactivity timeout */
1379 if (c
->options
.session_timeout
)
1381 event_timeout_init(&c
->c2
.session_interval
, c
->options
.session_timeout
,
1385 /* initialize pings */
1386 if (dco_enabled(&c
->options
))
1388 /* The DCO kernel module will send the pings instead of user space */
1389 event_timeout_clear(&c
->c2
.ping_rec_interval
);
1390 event_timeout_clear(&c
->c2
.ping_send_interval
);
1394 if (c
->options
.ping_send_timeout
)
1396 event_timeout_init(&c
->c2
.ping_send_interval
, c
->options
.ping_send_timeout
, 0);
1399 if (c
->options
.ping_rec_timeout
)
1401 event_timeout_init(&c
->c2
.ping_rec_interval
, c
->options
.ping_rec_timeout
, now
);
1405 /* If the auth-token renewal interval is shorter than reneg-sec, arm
1406 * "auth-token renewal" timer to send additional auth-token to update the
1407 * token on the client more often. If not, this happens automatically
1408 * at renegotiation time, without needing an extra event.
1410 if (c
->options
.auth_token_generate
1411 && c
->options
.auth_token_renewal
< c
->options
.renegotiate_seconds
)
1413 event_timeout_init(&c
->c2
.auth_token_renewal_interval
,
1414 c
->options
.auth_token_renewal
, now
);
1419 /* initialize connection establishment timer */
1420 event_timeout_init(&c
->c2
.wait_for_connect
, 1, now
);
1422 /* initialize occ timers */
1426 && c
->c2
.options_string_local
&& c
->c2
.options_string_remote
)
1428 event_timeout_init(&c
->c2
.occ_interval
, OCC_INTERVAL_SECONDS
, now
);
1431 if (c
->options
.mtu_test
)
1433 event_timeout_init(&c
->c2
.occ_mtu_load_test_interval
, OCC_MTU_LOAD_INTERVAL_SECONDS
, now
);
1436 /* initialize packet_id persistence timer */
1437 if (c
->options
.packet_id_file
)
1439 event_timeout_init(&c
->c2
.packet_id_persist_interval
, 60, now
);
1442 /* initialize tmp_int optimization that limits the number of times we call
1443 * tls_multi_process in the main event loop */
1444 interval_init(&c
->c2
.tmp_int
, TLS_MULTI_HORIZON
, TLS_MULTI_REFRESH
);
1449 * Initialize traffic shaper.
1452 do_init_traffic_shaper(struct context
*c
)
1454 /* initialize traffic shaper (i.e. transmit bandwidth limiter) */
1455 if (c
->options
.shaper
)
1457 shaper_init(&c
->c2
.shaper
, c
->options
.shaper
);
1458 shaper_msg(&c
->c2
.shaper
);
1463 * Allocate route list structures for IPv4 and IPv6
1464 * (we do this for IPv4 even if no --route option has been seen, as other
1465 * parts of OpenVPN might want to fill the route-list with info, e.g. DHCP)
1468 do_alloc_route_list(struct context
*c
)
1470 if (!c
->c1
.route_list
)
1472 ALLOC_OBJ_CLEAR_GC(c
->c1
.route_list
, struct route_list
, &c
->gc
);
1474 if (c
->options
.routes_ipv6
&& !c
->c1
.route_ipv6_list
)
1476 ALLOC_OBJ_CLEAR_GC(c
->c1
.route_ipv6_list
, struct route_ipv6_list
, &c
->gc
);
1482 * Initialize the route list, resolving any DNS names in route
1483 * options and saving routes in the environment.
1486 do_init_route_list(const struct options
*options
,
1487 struct route_list
*route_list
,
1488 const struct link_socket_info
*link_socket_info
,
1490 openvpn_net_ctx_t
*ctx
)
1492 const char *gw
= NULL
;
1493 int dev
= dev_type_enum(options
->dev
, options
->dev_type
);
1496 /* if DCO is enabled we have both regular routes and iroutes in the system
1497 * routing table, and normal routes must have a higher metric for that to
1498 * work so that iroutes are always matched first
1500 if (dco_enabled(options
))
1502 metric
= DCO_DEFAULT_METRIC
;
1505 if (dev
== DEV_TYPE_TUN
&& (options
->topology
== TOP_NET30
|| options
->topology
== TOP_P2P
))
1507 gw
= options
->ifconfig_remote_netmask
;
1509 if (options
->route_default_gateway
)
1511 gw
= options
->route_default_gateway
;
1513 if (options
->route_default_metric
)
1515 metric
= options
->route_default_metric
;
1518 if (init_route_list(route_list
,
1522 link_socket_current_remote(link_socket_info
),
1526 /* copy routes to environment */
1527 setenv_routes(es
, route_list
);
1532 do_init_route_ipv6_list(const struct options
*options
,
1533 struct route_ipv6_list
*route_ipv6_list
,
1534 const struct link_socket_info
*link_socket_info
,
1536 openvpn_net_ctx_t
*ctx
)
1538 const char *gw
= NULL
;
1539 int metric
= -1; /* no metric set */
1541 /* see explanation in do_init_route_list() */
1542 if (dco_enabled(options
))
1544 metric
= DCO_DEFAULT_METRIC
;
1547 gw
= options
->ifconfig_ipv6_remote
; /* default GW = remote end */
1548 if (options
->route_ipv6_default_gateway
)
1550 gw
= options
->route_ipv6_default_gateway
;
1553 if (options
->route_default_metric
)
1555 metric
= options
->route_default_metric
;
1558 /* redirect (IPv6) gateway to VPN? if yes, add a few more specifics
1560 if (options
->routes_ipv6
->flags
& RG_REROUTE_GW
)
1562 char *opt_list
[] = { "::/3", "2000::/4", "3000::/4", "fc00::/7", NULL
};
1565 for (i
= 0; opt_list
[i
]; i
++)
1567 add_route_ipv6_to_option_list( options
->routes_ipv6
,
1568 string_alloc(opt_list
[i
], options
->routes_ipv6
->gc
),
1569 NULL
, NULL
, options
->route_default_table_id
);
1573 if (init_route_ipv6_list(route_ipv6_list
,
1574 options
->routes_ipv6
,
1577 link_socket_current_remote_ipv6(link_socket_info
),
1581 /* copy routes to environment */
1582 setenv_routes_ipv6(es
, route_ipv6_list
);
1588 * Called after all initialization has been completed.
1591 initialization_sequence_completed(struct context
*c
, const unsigned int flags
)
1593 static const char message
[] = "Initialization Sequence Completed";
1595 /* Reset the unsuccessful connection counter on complete initialisation */
1596 c
->options
.unsuccessful_attempts
= 0;
1598 /* If we delayed UID/GID downgrade or chroot, do it now */
1599 do_uid_gid_chroot(c
, true);
1601 /* Test if errors */
1602 if (flags
& ISC_ERRORS
)
1605 show_routes(M_INFO
|M_NOPREFIX
);
1606 show_adapters(M_INFO
|M_NOPREFIX
);
1607 msg(M_INFO
, "%s With Errors ( see http://openvpn.net/faq.html#dhcpclientserv )", message
);
1609 #ifdef ENABLE_SYSTEMD
1610 sd_notifyf(0, "STATUS=Failed to start up: %s With Errors\nERRNO=1", message
);
1611 #endif /* HAVE_SYSTEMD_SD_DAEMON_H */
1612 msg(M_INFO
, "%s With Errors", message
);
1617 #ifdef ENABLE_SYSTEMD
1618 sd_notifyf(0, "STATUS=%s", message
);
1620 msg(M_INFO
, "%s", message
);
1623 /* Flag that we initialized */
1624 if ((flags
& (ISC_ERRORS
|ISC_SERVER
)) == 0)
1626 c
->options
.no_advance
= true;
1630 fork_register_dns_action(c
->c1
.tuntap
);
1633 #ifdef ENABLE_MANAGEMENT
1634 /* Tell management interface that we initialized */
1637 in_addr_t
*tun_local
= NULL
;
1638 struct in6_addr
*tun_local6
= NULL
;
1639 struct openvpn_sockaddr local
, remote
;
1640 struct link_socket_actual
*actual
;
1641 socklen_t sa_len
= sizeof(local
);
1642 const char *detail
= "SUCCESS";
1643 if (flags
& ISC_ERRORS
)
1647 /* Flag route error only on platforms where trivial "already exists" errors
1648 * are filtered out. Currently this is the case on Windows or if usng netlink.
1650 #if defined(_WIN32) || defined(ENABLE_SITNL)
1651 else if (flags
& ISC_ROUTE_ERRORS
)
1653 detail
= "ROUTE_ERROR";
1658 actual
= &get_link_socket_info(c
)->lsa
->actual
;
1659 remote
= actual
->dest
;
1660 getsockname(c
->c2
.link_sockets
[0]->sd
, &local
.addr
.sa
, &sa_len
);
1661 #if ENABLE_IP_PKTINFO
1662 if (!addr_defined(&local
))
1664 switch (local
.addr
.sa
.sa_family
)
1667 #if defined(HAVE_IN_PKTINFO) && defined(HAVE_IPI_SPEC_DST)
1668 local
.addr
.in4
.sin_addr
= actual
->pi
.in4
.ipi_spec_dst
;
1670 local
.addr
.in4
.sin_addr
= actual
->pi
.in4
;
1675 local
.addr
.in6
.sin6_addr
= actual
->pi
.in6
.ipi6_addr
;
1683 tun_local
= &c
->c1
.tuntap
->local
;
1684 tun_local6
= &c
->c1
.tuntap
->local_ipv6
;
1686 management_set_state(management
,
1687 OPENVPN_STATE_CONNECTED
,
1695 management_post_tunnel_open(management
, *tun_local
);
1698 #endif /* ifdef ENABLE_MANAGEMENT */
1702 * Determine if external route commands should be executed based on
1703 * configured options and backend driver
1706 route_noexec_enabled(const struct options
*o
, const struct tuntap
*tt
)
1708 return o
->route_noexec
1709 || (tt
&& tt
->backend_driver
== DRIVER_AFUNIX
)
1710 || (tt
&& tt
->backend_driver
== DRIVER_NULL
);
1714 * Possibly add routes and/or call route-up script
1718 do_route(const struct options
*options
,
1719 struct route_list
*route_list
,
1720 struct route_ipv6_list
*route_ipv6_list
,
1721 const struct tuntap
*tt
,
1722 const struct plugin_list
*plugins
,
1724 openvpn_net_ctx_t
*ctx
)
1727 if (!route_noexec_enabled(options
, tt
) && ( route_list
|| route_ipv6_list
) )
1729 ret
= add_routes(route_list
, route_ipv6_list
, tt
, ROUTE_OPTION_FLAGS(options
),
1731 setenv_int(es
, "redirect_gateway", route_did_redirect_default_gateway(route_list
));
1733 #ifdef ENABLE_MANAGEMENT
1736 management_up_down(management
, "UP", es
);
1740 if (plugin_defined(plugins
, OPENVPN_PLUGIN_ROUTE_UP
))
1742 if (plugin_call(plugins
, OPENVPN_PLUGIN_ROUTE_UP
, NULL
, NULL
, es
) != OPENVPN_PLUGIN_FUNC_SUCCESS
)
1744 msg(M_WARN
, "WARNING: route-up plugin call failed");
1748 if (options
->route_script
)
1750 struct argv argv
= argv_new();
1751 setenv_str(es
, "script_type", "route-up");
1752 argv_parse_cmd(&argv
, options
->route_script
);
1753 openvpn_run_script(&argv
, es
, 0, "--route-up");
1758 if (options
->show_net_up
)
1760 show_routes(M_INFO
|M_NOPREFIX
);
1761 show_adapters(M_INFO
|M_NOPREFIX
);
1763 else if (check_debug_level(D_SHOW_NET
))
1765 show_routes(D_SHOW_NET
|M_NOPREFIX
);
1766 show_adapters(D_SHOW_NET
|M_NOPREFIX
);
1773 * initialize tun/tap device object
1776 do_init_tun(struct context
*c
)
1778 c
->c1
.tuntap
= init_tun(c
->options
.dev
,
1779 c
->options
.dev_type
,
1780 c
->options
.topology
,
1781 c
->options
.ifconfig_local
,
1782 c
->options
.ifconfig_remote_netmask
,
1783 c
->options
.ifconfig_ipv6_local
,
1784 c
->options
.ifconfig_ipv6_netbits
,
1785 c
->options
.ifconfig_ipv6_remote
,
1786 c
->c1
.link_socket_addrs
[0].bind_local
,
1787 c
->c1
.link_socket_addrs
[0].remote_list
,
1788 !c
->options
.ifconfig_nowarn
,
1793 if (is_tun_afunix(c
->options
.dev_node
))
1795 /* Using AF_UNIX trumps using DCO */
1796 c
->c1
.tuntap
->backend_driver
= DRIVER_AFUNIX
;
1798 else if (is_dev_type(c
->options
.dev
, c
->options
.dev_type
, "null"))
1800 c
->c1
.tuntap
->backend_driver
= DRIVER_NULL
;
1805 c
->c1
.tuntap
->backend_driver
= c
->options
.windows_driver
;
1808 else if (dco_enabled(&c
->options
))
1810 c
->c1
.tuntap
->backend_driver
= DRIVER_DCO
;
1814 c
->c1
.tuntap
->backend_driver
= DRIVER_GENERIC_TUNTAP
;
1818 init_tun_post(c
->c1
.tuntap
,
1820 &c
->options
.tuntap_options
);
1822 c
->c1
.tuntap_owned
= true;
1826 * Open tun/tap device, ifconfig, call up script, etc.
1831 can_preserve_tun(struct tuntap
*tt
)
1833 if (tt
&& tt
->backend_driver
== DRIVER_AFUNIX
)
1837 #ifdef TARGET_ANDROID
1840 return is_tun_type_set(tt
);
1845 * Add WFP filters to block traffic to local networks.
1846 * Depending on the configuration all or just DNS is filtered.
1847 * This functionality is only available on Windows on all other
1848 * systems this function is a noop.
1850 * @param c pointer to the connection context
1853 add_wfp_block(struct context
*c
)
1856 /* Fortify 'redirect-gateway block-local' with firewall rules? */
1857 bool block_local
= block_local_needed(c
->c1
.route_list
);
1859 if (c
->options
.block_outside_dns
|| block_local
)
1861 BOOL dns_only
= !block_local
;
1862 if (!win_wfp_block(c
->c1
.tuntap
->adapter_index
, c
->options
.msg_channel
, dns_only
))
1864 msg(M_FATAL
, "WFP: initialization failed");
1871 * Remove any WFP block filters previously added.
1872 * This functionality is only available on Windows on all other
1873 * systems the function is a noop.
1875 * @param c pointer to the connection context
1876 * @param adapter_index the VPN adapter index
1879 del_wfp_block(struct context
*c
, unsigned long adapter_index
)
1882 if (c
->options
.block_outside_dns
|| block_local_needed(c
->c1
.route_list
))
1884 if (!win_wfp_uninit(adapter_index
, c
->options
.msg_channel
))
1886 msg(M_FATAL
, "WFP: deinitialization failed");
1893 * Determines if ifconfig execution should be disabled because of a
1898 ifconfig_noexec_enabled(const struct context
*c
)
1900 return c
->options
.ifconfig_noexec
1901 || (c
->c1
.tuntap
&& c
->c1
.tuntap
->backend_driver
== DRIVER_AFUNIX
)
1902 || (c
->c1
.tuntap
&& c
->c1
.tuntap
->backend_driver
== DRIVER_NULL
);
1906 open_tun_backend(struct context
*c
)
1908 struct tuntap
*tt
= c
->c1
.tuntap
;
1910 if (tt
->backend_driver
== DRIVER_NULL
)
1912 open_tun_null(c
->c1
.tuntap
);
1914 else if (tt
->backend_driver
== DRIVER_AFUNIX
)
1916 open_tun_afunix(&c
->options
, c
->c2
.frame
.tun_mtu
, tt
, c
->c2
.es
);
1920 open_tun(c
->options
.dev
, c
->options
.dev_type
, c
->options
.dev_node
,
1923 msg(M_INFO
, "%s device [%s] opened", print_tun_backend_driver(tt
->backend_driver
), tt
->actual_name
);
1928 do_open_tun(struct context
*c
, int *error_flags
)
1930 struct gc_arena gc
= gc_new();
1934 if (!can_preserve_tun(c
->c1
.tuntap
))
1936 #ifdef TARGET_ANDROID
1937 /* If we emulate persist-tun on android we still have to open a new tun and
1938 * then close the old */
1942 oldtunfd
= c
->c1
.tuntap
->fd
;
1944 c
->c1
.tuntap
= NULL
;
1945 c
->c1
.tuntap_owned
= false;
1949 /* initialize (but do not open) tun/tap object, this also sets
1950 * the backend driver type */
1953 /* inherit the dco context from the tuntap object */
1954 if (c
->c2
.tls_multi
)
1956 c
->c2
.tls_multi
->dco
= &c
->c1
.tuntap
->dco
;
1960 /* store (hide) interactive service handle in tuntap_options */
1961 c
->c1
.tuntap
->options
.msg_channel
= c
->options
.msg_channel
;
1962 msg(D_ROUTE
, "interactive service msg_channel=%" PRIuPTR
,
1963 (intptr_t) c
->options
.msg_channel
);
1966 /* allocate route list structure */
1967 do_alloc_route_list(c
);
1969 /* parse and resolve the route option list */
1970 ASSERT(c
->c2
.link_sockets
[0]);
1971 if (c
->options
.routes
&& c
->c1
.route_list
)
1973 do_init_route_list(&c
->options
, c
->c1
.route_list
,
1974 &c
->c2
.link_sockets
[0]->info
, c
->c2
.es
, &c
->net_ctx
);
1976 if (c
->options
.routes_ipv6
&& c
->c1
.route_ipv6_list
)
1978 do_init_route_ipv6_list(&c
->options
, c
->c1
.route_ipv6_list
,
1979 &c
->c2
.link_sockets
[0]->info
, c
->c2
.es
, &c
->net_ctx
);
1983 if (!ifconfig_noexec_enabled(c
)
1984 && ifconfig_order(c
->c1
.tuntap
) == IFCONFIG_BEFORE_TUN_OPEN
)
1986 /* guess actual tun/tap unit number that will be returned
1988 const char *guess
= guess_tuntap_dev(c
->options
.dev
,
1989 c
->options
.dev_type
,
1990 c
->options
.dev_node
,
1992 do_ifconfig(c
->c1
.tuntap
, guess
, c
->c2
.frame
.tun_mtu
, c
->c2
.es
, &c
->net_ctx
);
1995 /* possibly add routes */
1996 if (route_order(c
->c1
.tuntap
) == ROUTE_BEFORE_TUN
)
1998 /* Ignore route_delay, would cause ROUTE_BEFORE_TUN to be ignored */
1999 bool status
= do_route(&c
->options
, c
->c1
.route_list
, c
->c1
.route_ipv6_list
,
2000 c
->c1
.tuntap
, c
->plugins
, c
->c2
.es
, &c
->net_ctx
);
2001 *error_flags
|= (status
? 0 : ISC_ROUTE_ERRORS
);
2003 #ifdef TARGET_ANDROID
2004 /* Store the old fd inside the fd so open_tun can use it */
2005 c
->c1
.tuntap
->fd
= oldtunfd
;
2008 if (dco_enabled(&c
->options
))
2010 ovpn_dco_init(c
->mode
, &c
->c1
.tuntap
->dco
, c
->options
.dev_node
);
2013 /* open the tun device */
2014 open_tun_backend(c
);
2016 /* set the hardware address */
2017 if (c
->options
.lladdr
)
2019 set_lladdr(&c
->net_ctx
, c
->c1
.tuntap
->actual_name
, c
->options
.lladdr
, c
->c2
.es
);
2023 if (!ifconfig_noexec_enabled(c
)
2024 && ifconfig_order(c
->c1
.tuntap
) == IFCONFIG_AFTER_TUN_OPEN
)
2026 do_ifconfig(c
->c1
.tuntap
, c
->c1
.tuntap
->actual_name
,
2027 c
->c2
.frame
.tun_mtu
, c
->c2
.es
, &c
->net_ctx
);
2030 run_dns_up_down(true, &c
->options
, c
->c1
.tuntap
, &c
->persist
.duri
);
2032 /* run the up script */
2033 run_up_down(c
->options
.up_script
,
2036 c
->c1
.tuntap
->actual_name
,
2038 c
->c1
.tuntap
->adapter_index
,
2040 dev_type_string(c
->options
.dev
, c
->options
.dev_type
),
2041 c
->c2
.frame
.tun_mtu
,
2042 print_in_addr_t(c
->c1
.tuntap
->local
, IA_EMPTY_IF_UNDEF
, &gc
),
2043 print_in_addr_t(c
->c1
.tuntap
->remote_netmask
, IA_EMPTY_IF_UNDEF
, &gc
),
2051 /* possibly add routes */
2052 if ((route_order(c
->c1
.tuntap
) == ROUTE_AFTER_TUN
) && (!c
->options
.route_delay_defined
))
2054 int status
= do_route(&c
->options
, c
->c1
.route_list
, c
->c1
.route_ipv6_list
,
2055 c
->c1
.tuntap
, c
->plugins
, c
->c2
.es
, &c
->net_ctx
);
2056 *error_flags
|= (status
? 0 : ISC_ROUTE_ERRORS
);
2064 msg(M_INFO
, "Preserving previous TUN/TAP instance: %s",
2065 c
->c1
.tuntap
->actual_name
);
2067 /* explicitly set the ifconfig_* env vars */
2068 do_ifconfig_setenv(c
->c1
.tuntap
, c
->c2
.es
);
2070 run_dns_up_down(true, &c
->options
, c
->c1
.tuntap
, &c
->persist
.duri
);
2072 /* run the up script if user specified --up-restart */
2073 if (c
->options
.up_restart
)
2075 run_up_down(c
->options
.up_script
,
2078 c
->c1
.tuntap
->actual_name
,
2080 c
->c1
.tuntap
->adapter_index
,
2082 dev_type_string(c
->options
.dev
, c
->options
.dev_type
),
2083 c
->c2
.frame
.tun_mtu
,
2084 print_in_addr_t(c
->c1
.tuntap
->local
, IA_EMPTY_IF_UNDEF
, &gc
),
2085 print_in_addr_t(c
->c1
.tuntap
->remote_netmask
, IA_EMPTY_IF_UNDEF
, &gc
),
2099 * Close TUN/TAP device
2103 do_close_tun_simple(struct context
*c
)
2105 msg(D_CLOSE
, "Closing %s interface",
2106 print_tun_backend_driver(c
->c1
.tuntap
->backend_driver
));
2110 if (!ifconfig_noexec_enabled(c
))
2112 undo_ifconfig(c
->c1
.tuntap
, &c
->net_ctx
);
2114 if (c
->c1
.tuntap
->backend_driver
== DRIVER_AFUNIX
)
2116 close_tun_afunix(c
->c1
.tuntap
);
2118 else if (c
->c1
.tuntap
->backend_driver
== DRIVER_NULL
)
2120 free(c
->c1
.tuntap
->actual_name
);
2125 close_tun(c
->c1
.tuntap
, &c
->net_ctx
);
2127 c
->c1
.tuntap
= NULL
;
2129 c
->c1
.tuntap_owned
= false;
2130 CLEAR(c
->c1
.pulled_options_digest_save
);
2134 do_close_tun(struct context
*c
, bool force
)
2136 /* With dco-win we open tun handle in the very beginning.
2137 * In case when tun wasn't opened - like we haven't connected,
2138 * we still need to close tun handle
2140 if (tuntap_is_dco_win(c
->c1
.tuntap
) && !is_tun_type_set(c
->c1
.tuntap
))
2142 do_close_tun_simple(c
);
2146 if (!c
->c1
.tuntap
|| !c
->c1
.tuntap_owned
)
2151 struct gc_arena gc
= gc_new();
2152 const char *tuntap_actual
= string_alloc(c
->c1
.tuntap
->actual_name
, &gc
);
2153 const in_addr_t local
= c
->c1
.tuntap
->local
;
2154 const in_addr_t remote_netmask
= c
->c1
.tuntap
->remote_netmask
;
2155 unsigned long adapter_index
= 0;
2157 adapter_index
= c
->c1
.tuntap
->adapter_index
;
2160 run_dns_up_down(false, &c
->options
, c
->c1
.tuntap
, &c
->persist
.duri
);
2162 if (force
|| !(c
->sig
->signal_received
== SIGUSR1
&& c
->options
.persist_tun
))
2164 static_context
= NULL
;
2166 #ifdef ENABLE_MANAGEMENT
2167 /* tell management layer we are about to close the TUN/TAP device */
2170 management_pre_tunnel_close(management
);
2171 management_up_down(management
, "DOWN", c
->c2
.es
);
2175 /* delete any routes we added */
2176 if (c
->c1
.route_list
|| c
->c1
.route_ipv6_list
)
2178 run_up_down(c
->options
.route_predown_script
,
2180 OPENVPN_PLUGIN_ROUTE_PREDOWN
,
2186 c
->c2
.frame
.tun_mtu
,
2187 print_in_addr_t(local
, IA_EMPTY_IF_UNDEF
, &gc
),
2188 print_in_addr_t(remote_netmask
, IA_EMPTY_IF_UNDEF
, &gc
),
2190 signal_description(c
->sig
->signal_received
,
2191 c
->sig
->signal_text
),
2195 delete_routes(c
->c1
.route_list
, c
->c1
.route_ipv6_list
,
2196 c
->c1
.tuntap
, ROUTE_OPTION_FLAGS(&c
->options
),
2197 c
->c2
.es
, &c
->net_ctx
);
2200 /* actually close tun/tap device based on --down-pre flag */
2201 if (!c
->options
.down_pre
)
2203 do_close_tun_simple(c
);
2206 /* Run the down script -- note that it will run at reduced
2207 * privilege if, for example, "--user" was used. */
2208 run_up_down(c
->options
.down_script
,
2210 OPENVPN_PLUGIN_DOWN
,
2216 c
->c2
.frame
.tun_mtu
,
2217 print_in_addr_t(local
, IA_EMPTY_IF_UNDEF
, &gc
),
2218 print_in_addr_t(remote_netmask
, IA_EMPTY_IF_UNDEF
, &gc
),
2220 signal_description(c
->sig
->signal_received
,
2221 c
->sig
->signal_text
),
2225 del_wfp_block(c
, adapter_index
);
2227 /* actually close tun/tap device based on --down-pre flag */
2228 if (c
->options
.down_pre
)
2230 do_close_tun_simple(c
);
2235 /* run the down script on this restart if --up-restart was specified */
2236 if (c
->options
.up_restart
)
2238 run_up_down(c
->options
.down_script
,
2240 OPENVPN_PLUGIN_DOWN
,
2246 c
->c2
.frame
.tun_mtu
,
2247 print_in_addr_t(local
, IA_EMPTY_IF_UNDEF
, &gc
),
2248 print_in_addr_t(remote_netmask
, IA_EMPTY_IF_UNDEF
, &gc
),
2250 signal_description(c
->sig
->signal_received
,
2251 c
->sig
->signal_text
),
2256 del_wfp_block(c
, adapter_index
);
2264 struct context
*c
= static_context
;
2267 static_context
= NULL
;
2268 do_close_tun(c
, true);
2273 * Handle delayed tun/tap interface bringup due to --up-delay or --pull
2277 * Helper for do_up(). Take two option hashes and return true if they are not
2278 * equal, or either one is all-zeroes.
2281 options_hash_changed_or_zero(const struct sha256_digest
*a
,
2282 const struct sha256_digest
*b
)
2284 const struct sha256_digest zero
= {{0}};
2285 return memcmp(a
, b
, sizeof(struct sha256_digest
))
2286 || !memcmp(a
, &zero
, sizeof(struct sha256_digest
));
2290 * Helper function for tls_print_deferred_options_results
2291 * Adds the ", " delimitor if there already some data in the
2295 add_delim_if_non_empty(struct buffer
*buf
, const char *header
)
2297 if (buf_len(buf
) > strlen(header
))
2299 buf_printf(buf
, ", ");
2305 * Prints the results of options imported for the data channel
2309 tls_print_deferred_options_results(struct context
*c
)
2311 struct options
*o
= &c
->options
;
2314 uint8_t line
[1024] = { 0 };
2315 buf_set_write(&out
, line
, sizeof(line
));
2318 if (cipher_kt_mode_aead(o
->ciphername
))
2320 buf_printf(&out
, "Data Channel: cipher '%s'",
2321 cipher_kt_name(o
->ciphername
));
2325 buf_printf(&out
, "Data Channel: cipher '%s', auth '%s'",
2326 cipher_kt_name(o
->ciphername
), md_kt_name(o
->authname
));
2331 buf_printf(&out
, ", peer-id: %d", o
->peer_id
);
2335 if (c
->c2
.comp_context
)
2337 buf_printf(&out
, ", compression: '%s'", c
->c2
.comp_context
->alg
.name
);
2341 msg(D_HANDSHAKE
, "%s", BSTR(&out
));
2345 const char *header
= "Timers: ";
2347 buf_printf(&out
, "%s", header
);
2349 if (o
->ping_send_timeout
)
2351 buf_printf(&out
, "ping %d", o
->ping_send_timeout
);
2354 if (o
->ping_rec_timeout_action
!= PING_UNDEF
)
2356 /* yes unidirectional ping is possible .... */
2357 add_delim_if_non_empty(&out
, header
);
2359 if (o
->ping_rec_timeout_action
== PING_EXIT
)
2361 buf_printf(&out
, "ping-exit %d", o
->ping_rec_timeout
);
2365 buf_printf(&out
, "ping-restart %d", o
->ping_rec_timeout
);
2369 if (o
->inactivity_timeout
)
2371 add_delim_if_non_empty(&out
, header
);
2373 buf_printf(&out
, "inactive %d", o
->inactivity_timeout
);
2374 if (o
->inactivity_minimum_bytes
)
2376 buf_printf(&out
, " %" PRIu64
, o
->inactivity_minimum_bytes
);
2380 if (o
->session_timeout
)
2382 add_delim_if_non_empty(&out
, header
);
2383 buf_printf(&out
, "session-timeout %d", o
->session_timeout
);
2386 if (buf_len(&out
) > strlen(header
))
2388 msg(D_HANDSHAKE
, "%s", BSTR(&out
));
2392 header
= "Protocol options: ";
2393 buf_printf(&out
, "%s", header
);
2395 if (c
->options
.ce
.explicit_exit_notification
)
2397 buf_printf(&out
, "explicit-exit-notify %d",
2398 c
->options
.ce
.explicit_exit_notification
);
2400 if (c
->options
.imported_protocol_flags
)
2402 add_delim_if_non_empty(&out
, header
);
2404 buf_printf(&out
, "protocol-flags");
2406 if (o
->imported_protocol_flags
& CO_USE_CC_EXIT_NOTIFY
)
2408 buf_printf(&out
, " cc-exit");
2410 if (o
->imported_protocol_flags
& CO_USE_TLS_KEY_MATERIAL_EXPORT
)
2412 buf_printf(&out
, " tls-ekm");
2414 if (o
->imported_protocol_flags
& CO_USE_DYNAMIC_TLS_CRYPT
)
2416 buf_printf(&out
, " dyn-tls-crypt");
2418 if (o
->imported_protocol_flags
& CO_EPOCH_DATA_KEY_FORMAT
)
2420 buf_printf(&out
, " aead-epoch");
2424 if (buf_len(&out
) > strlen(header
))
2426 msg(D_HANDSHAKE
, "%s", BSTR(&out
));
2432 * This function is expected to be invoked after open_tun() was performed.
2434 * This kind of behaviour is required by DCO, because the following operations
2435 * can be done only after the DCO device was created and the new peer was
2439 do_deferred_options_part2(struct context
*c
)
2441 struct frame
*frame_fragment
= NULL
;
2442 #ifdef ENABLE_FRAGMENT
2443 if (c
->options
.ce
.fragment
)
2445 frame_fragment
= &c
->c2
.frame_fragment
;
2449 struct tls_session
*session
= &c
->c2
.tls_multi
->session
[TM_ACTIVE
];
2450 if (!tls_session_update_crypto_params(c
->c2
.tls_multi
, session
,
2451 &c
->options
, &c
->c2
.frame
,
2453 get_link_socket_info(c
),
2454 &c
->c1
.tuntap
->dco
))
2456 msg(D_TLS_ERRORS
, "OPTIONS ERROR: failed to import crypto options");
2464 do_up(struct context
*c
, bool pulled_options
, unsigned int option_types_found
)
2466 int error_flags
= 0;
2467 if (!c
->c2
.do_up_ran
)
2469 reset_coarse_timers(c
);
2473 if (!do_deferred_options(c
, option_types_found
))
2475 msg(D_PUSH_ERRORS
, "ERROR: Failed to apply push options");
2480 /* if --up-delay specified, open tun, do ifconfig, and run up script now */
2481 if (c
->options
.up_delay
|| PULL_DEFINED(&c
->options
))
2483 c
->c2
.did_open_tun
= do_open_tun(c
, &error_flags
);
2487 * Was tun interface object persisted from previous restart iteration,
2488 * and if so did pulled options string change from previous iteration?
2490 if (!c
->c2
.did_open_tun
2491 && PULL_DEFINED(&c
->options
)
2493 && options_hash_changed_or_zero(&c
->c1
.pulled_options_digest_save
,
2494 &c
->c2
.pulled_options_digest
))
2496 /* if so, close tun, delete routes, then reinitialize tun and add routes */
2497 msg(M_INFO
, "NOTE: Pulled options changed on restart, will need to close and reopen TUN/TAP device.");
2499 bool tt_dco_win
= tuntap_is_dco_win(c
->c1
.tuntap
);
2500 do_close_tun(c
, true);
2504 msg(M_NONFATAL
, "dco-win doesn't yet support reopening TUN device");
2505 /* prevent link_socket_close() from closing handle with WinSock API */
2506 c
->c2
.link_sockets
[0]->sd
= SOCKET_UNDEFINED
;
2511 management_sleep(1);
2512 c
->c2
.did_open_tun
= do_open_tun(c
, &error_flags
);
2519 /* This part needs to be run in p2p mode (without pull) when the client
2520 * reconnects to setup various things (like DCO and NCP cipher) that
2521 * might have changed from the previous connection.
2523 if (!c
->c2
.do_up_ran
|| (c
->c2
.tls_multi
&& c
->c2
.tls_multi
->multi_state
== CAS_RECONNECT_PENDING
))
2525 if (c
->mode
== MODE_POINT_TO_POINT
)
2527 /* ovpn-dco requires adding the peer now, before any option can be set,
2528 * but *after* having parsed the pushed peer-id in do_deferred_options()
2530 int ret
= dco_p2p_add_new_peer(c
);
2533 msg(D_DCO
, "Cannot add peer to DCO: %s (%d)", strerror(-ret
), ret
);
2538 /* do_deferred_options_part2() and do_deferred_p2p_ncp() *must* be
2539 * invoked after open_tun().
2540 * This is required by DCO because we must have created the interface
2541 * and added the peer before we can fiddle with the keys or any other
2542 * data channel per-peer setting.
2546 if (!do_deferred_options_part2(c
))
2553 if (c
->mode
== MODE_POINT_TO_POINT
)
2555 if (!do_deferred_p2p_ncp(c
))
2557 msg(D_TLS_ERRORS
, "ERROR: Failed to apply P2P negotiated protocol options");
2563 if (c
->c2
.did_open_tun
)
2565 c
->c1
.pulled_options_digest_save
= c
->c2
.pulled_options_digest
;
2567 /* if --route-delay was specified, start timer */
2568 if ((route_order(c
->c1
.tuntap
) == ROUTE_AFTER_TUN
) && c
->options
.route_delay_defined
)
2570 event_timeout_init(&c
->c2
.route_wakeup
, c
->options
.route_delay
, now
);
2571 event_timeout_init(&c
->c2
.route_wakeup_expire
, c
->options
.route_delay
+ c
->options
.route_delay_window
, now
);
2572 tun_standby_init(c
->c1
.tuntap
);
2576 /* client/p2p --route-delay undefined */
2577 initialization_sequence_completed(c
, error_flags
);
2580 else if (c
->options
.mode
== MODE_POINT_TO_POINT
)
2582 /* client/p2p restart with --persist-tun */
2583 initialization_sequence_completed(c
, error_flags
);
2586 tls_print_deferred_options_results(c
);
2588 c
->c2
.do_up_ran
= true;
2589 if (c
->c2
.tls_multi
)
2591 c
->c2
.tls_multi
->multi_state
= CAS_CONNECT_DONE
;
2598 * These are the option categories which will be accepted by pull.
2601 pull_permission_mask(const struct context
*c
)
2603 unsigned int flags
=
2605 | OPT_P_ROUTE_EXTRAS
2614 | OPT_P_EXPLICIT_NOTIFY
2621 if (!c
->options
.route_nopull
)
2623 flags
|= (OPT_P_ROUTE
| OPT_P_DHCPDNS
);
2630 do_deferred_p2p_ncp(struct context
*c
)
2632 if (!c
->c2
.tls_multi
)
2637 c
->options
.use_peer_id
= c
->c2
.tls_multi
->use_peer_id
;
2639 struct tls_session
*session
= &c
->c2
.tls_multi
->session
[TM_ACTIVE
];
2641 const char *ncp_cipher
= get_p2p_ncp_cipher(session
, c
->c2
.tls_multi
->peer_info
,
2646 c
->options
.ciphername
= ncp_cipher
;
2648 else if (!c
->options
.enable_ncp_fallback
)
2650 msg(D_TLS_ERRORS
, "ERROR: failed to negotiate cipher with peer and "
2651 "--data-ciphers-fallback not enabled. No usable "
2652 "data channel cipher");
2656 struct frame
*frame_fragment
= NULL
;
2657 #ifdef ENABLE_FRAGMENT
2658 if (c
->options
.ce
.fragment
)
2660 frame_fragment
= &c
->c2
.frame_fragment
;
2664 if (!tls_session_update_crypto_params(c
->c2
.tls_multi
, session
, &c
->options
,
2665 &c
->c2
.frame
, frame_fragment
,
2666 get_link_socket_info(c
),
2667 &c
->c1
.tuntap
->dco
))
2669 msg(D_TLS_ERRORS
, "ERROR: failed to set crypto cipher");
2676 * Handle non-tun-related pulled options.
2679 do_deferred_options(struct context
*c
, const unsigned int found
)
2681 if (found
& OPT_P_MESSAGES
)
2683 init_verb_mute(c
, IVM_LEVEL_1
|IVM_LEVEL_2
);
2684 msg(D_PUSH
, "OPTIONS IMPORT: --verb and/or --mute level changed");
2686 if (found
& OPT_P_TIMER
)
2688 do_init_timers(c
, true);
2689 msg(D_PUSH_DEBUG
, "OPTIONS IMPORT: timers and/or timeouts modified");
2692 if (found
& OPT_P_EXPLICIT_NOTIFY
)
2694 /* Client side, so just check the first link_socket */
2695 if (!proto_is_udp(c
->c2
.link_sockets
[0]->info
.proto
)
2696 && c
->options
.ce
.explicit_exit_notification
)
2698 msg(D_PUSH
, "OPTIONS IMPORT: --explicit-exit-notify can only be used with --proto udp");
2699 c
->options
.ce
.explicit_exit_notification
= 0;
2703 msg(D_PUSH_DEBUG
, "OPTIONS IMPORT: explicit notify parm(s) modified");
2707 if (found
& OPT_P_COMP
)
2709 if (!check_compression_settings_valid(&c
->options
.comp
, D_PUSH_ERRORS
))
2711 msg(D_PUSH_ERRORS
, "OPTIONS ERROR: server pushed compression "
2712 "settings that are not allowed and will result "
2713 "in a non-working connection. "
2714 "See also allow-compression in the manual.");
2718 msg(D_PUSH_DEBUG
, "OPTIONS IMPORT: compression parms modified");
2719 comp_uninit(c
->c2
.comp_context
);
2720 c
->c2
.comp_context
= comp_init(&c
->options
.comp
);
2724 if (found
& OPT_P_SHAPER
)
2726 msg(D_PUSH
, "OPTIONS IMPORT: traffic shaper enabled");
2727 do_init_traffic_shaper(c
);
2730 if (found
& OPT_P_SOCKBUF
)
2732 msg(D_PUSH
, "OPTIONS IMPORT: --sndbuf/--rcvbuf options modified");
2734 for (int i
= 0; i
< c
->c1
.link_sockets_num
; i
++)
2736 link_socket_update_buffer_sizes(c
->c2
.link_sockets
[i
],
2742 if (found
& OPT_P_SOCKFLAGS
)
2744 msg(D_PUSH
, "OPTIONS IMPORT: --socket-flags option modified");
2745 for (int i
= 0; i
< c
->c1
.link_sockets_num
; i
++)
2747 link_socket_update_flags(c
->c2
.link_sockets
[i
],
2748 c
->options
.sockflags
);
2752 if (found
& OPT_P_PERSIST
)
2754 msg(D_PUSH
, "OPTIONS IMPORT: --persist options modified");
2756 if (found
& OPT_P_UP
)
2758 msg(D_PUSH
, "OPTIONS IMPORT: --ifconfig/up options modified");
2760 if (found
& OPT_P_ROUTE
)
2762 msg(D_PUSH
, "OPTIONS IMPORT: route options modified");
2764 if (found
& OPT_P_ROUTE_EXTRAS
)
2766 msg(D_PUSH
, "OPTIONS IMPORT: route-related options modified");
2768 if (found
& OPT_P_DHCPDNS
)
2770 msg(D_PUSH
, "OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified");
2772 if (found
& OPT_P_SETENV
)
2774 msg(D_PUSH
, "OPTIONS IMPORT: environment modified");
2777 if (found
& OPT_P_PEER_ID
)
2779 msg(D_PUSH_DEBUG
, "OPTIONS IMPORT: peer-id set");
2780 c
->c2
.tls_multi
->use_peer_id
= true;
2781 c
->c2
.tls_multi
->peer_id
= c
->options
.peer_id
;
2784 /* process (potentially) pushed options */
2785 if (c
->options
.pull
)
2787 if (!check_pull_client_ncp(c
, found
))
2792 /* Check if pushed options are compatible with DCO, if enabled */
2793 if (dco_enabled(&c
->options
)
2794 && !dco_check_pull_options(D_PUSH_ERRORS
, &c
->options
))
2796 msg(D_PUSH_ERRORS
, "OPTIONS ERROR: pushed options are incompatible "
2797 "with data channel offload. Use --disable-dco to connect to "
2803 /* Ensure that for epoch data format is only enabled if also data v2
2805 bool epoch_data
= (c
->options
.imported_protocol_flags
& CO_EPOCH_DATA_KEY_FORMAT
);
2806 bool datav2_enabled
= (c
->options
.peer_id
>= 0 && c
->options
.peer_id
< MAX_PEER_ID
);
2808 if (epoch_data
&& !datav2_enabled
)
2810 msg(D_PUSH_ERRORS
, "OPTIONS ERROR: Epoch key data format tag requires "
2811 "data v2 (peer-id) to be enabled.");
2816 if (found
& OPT_P_PUSH_MTU
)
2818 /* MTU has changed, check that the pushed MTU is small enough to
2819 * be able to change it */
2820 msg(D_PUSH
, "OPTIONS IMPORT: tun-mtu set to %d", c
->options
.ce
.tun_mtu
);
2822 struct frame
*frame
= &c
->c2
.frame
;
2824 if (c
->options
.ce
.tun_mtu
> frame
->tun_max_mtu
)
2826 msg(D_PUSH_ERRORS
, "Server-pushed tun-mtu is too large, please add "
2827 "tun-mtu-max %d in the client configuration",
2828 c
->options
.ce
.tun_mtu
);
2830 frame
->tun_mtu
= min_int(frame
->tun_max_mtu
, c
->options
.ce
.tun_mtu
);
2837 * Possible hold on initialization, holdtime is the
2838 * time OpenVPN would wait without management
2841 do_hold(int holdtime
)
2843 #ifdef ENABLE_MANAGEMENT
2846 /* block until management hold is released */
2847 if (management_hold(management
, holdtime
))
2857 * Sleep before restart.
2860 socket_restart_pause(struct context
*c
)
2873 sec
= c
->options
.ce
.connect_retry_seconds
;
2878 if (GREMLIN_CONNECTION_FLOOD_LEVEL(c
->options
.gremlin
))
2884 if (auth_retry_get() == AR_NOINTERACT
)
2889 /* Slow down reconnection after 5 retries per remote -- for TCP client or UDP tls-client only */
2890 if (c
->mode
== CM_CHILD_TCP
2891 || (c
->options
.ce
.proto
== PROTO_UDP
&& c
->options
.tls_client
))
2893 backoff
= (c
->options
.unsuccessful_attempts
/ c
->options
.connection_list
->len
) - 4;
2896 /* sec is less than 2^16; we can left shift it by up to 15 bits without overflow */
2897 sec
= max_int(sec
, 1) << min_int(backoff
, 15);
2899 if (c
->options
.server_backoff_time
)
2901 sec
= max_int(sec
, c
->options
.server_backoff_time
);
2902 c
->options
.server_backoff_time
= 0;
2905 if (sec
> c
->options
.ce
.connect_retry_seconds_max
)
2907 sec
= c
->options
.ce
.connect_retry_seconds_max
;
2911 if (c
->persist
.restart_sleep_seconds
> 0 && c
->persist
.restart_sleep_seconds
> sec
)
2913 sec
= c
->persist
.restart_sleep_seconds
;
2915 else if (c
->persist
.restart_sleep_seconds
== -1)
2919 c
->persist
.restart_sleep_seconds
= 0;
2921 /* do management hold on context restart, i.e. second, third, fourth, etc. initialization */
2929 msg(D_RESTART
, "Restart pause, %d second(s)", sec
);
2930 management_sleep(sec
);
2935 * Do a possible pause on context_2 initialization.
2938 do_startup_pause(struct context
*c
)
2942 socket_restart_pause(c
);
2946 do_hold(0); /* do management hold on first context initialization */
2951 get_frame_mtu(struct context
*c
, const struct options
*o
)
2955 if (o
->ce
.link_mtu_defined
)
2957 ASSERT(o
->ce
.link_mtu_defined
);
2958 /* if we have a link mtu defined we calculate what the old code
2959 * would have come up with as tun-mtu */
2960 size_t overhead
= frame_calculate_protocol_header_size(&c
->c1
.ks
.key_type
,
2962 mtu
= o
->ce
.link_mtu
- overhead
;
2967 ASSERT(o
->ce
.tun_mtu_defined
);
2968 mtu
= o
->ce
.tun_mtu
;
2971 if (mtu
< TUN_MTU_MIN
)
2973 msg(M_WARN
, "TUN MTU value (%zu) must be at least %d", mtu
, TUN_MTU_MIN
);
2974 frame_print(&c
->c2
.frame
, M_FATAL
, "MTU is too small");
2980 * Finalize MTU parameters based on command line or config file options.
2983 frame_finalize_options(struct context
*c
, const struct options
*o
)
2990 struct frame
*frame
= &c
->c2
.frame
;
2992 frame
->tun_mtu
= get_frame_mtu(c
, o
);
2993 frame
->tun_max_mtu
= o
->ce
.tun_mtu_max
;
2995 /* max mtu needs to be at least as large as the tun mtu */
2996 frame
->tun_max_mtu
= max_int(frame
->tun_mtu
, frame
->tun_max_mtu
);
2998 /* We always allow at least 1600 MTU packets to be received in our buffer
2999 * space to allow server to push "baby giant" MTU sizes */
3000 frame
->tun_max_mtu
= max_int(1600, frame
->tun_max_mtu
);
3002 size_t payload_size
= frame
->tun_max_mtu
;
3004 /* we need to be also large enough to hold larger control channel packets
3006 payload_size
= max_int(payload_size
, o
->ce
.tls_mtu
);
3008 /* The extra tun needs to be added to the payload size */
3009 if (o
->ce
.tun_mtu_defined
)
3011 payload_size
+= o
->ce
.tun_mtu_extra
;
3014 /* Add 32 byte of extra space in the buffer to account for small errors
3015 * in the calculation */
3019 /* the space that is reserved before the payload to add extra headers to it
3020 * we always reserve the space for the worst case */
3021 size_t headroom
= 0;
3023 /* includes IV and packet ID */
3024 headroom
+= crypto_max_overhead();
3026 /* peer id + opcode */
3029 /* socks proxy header */
3032 /* compression header and fragment header (part of the encrypted payload) */
3035 /* Round up headroom to the next multiple of 4 to ensure alignment */
3036 headroom
= (headroom
+ 3) & ~3;
3038 /* Add the headroom to the payloadsize as a received (IP) packet can have
3039 * all the extra headers in it */
3040 payload_size
+= headroom
;
3042 /* the space after the payload, this needs some extra buffer space for
3043 * encryption so headroom is probably too much but we do not really care
3044 * the few extra bytes */
3045 size_t tailroom
= headroom
;
3048 msg(D_MTU_DEBUG
, "MTU: adding %zu buffer tailroom for compression for %zu "
3050 COMP_EXTRA_BUFFER(payload_size
), payload_size
);
3051 tailroom
+= COMP_EXTRA_BUFFER(payload_size
);
3054 frame
->buf
.payload_size
= payload_size
;
3055 frame
->buf
.headroom
= headroom
;
3056 frame
->buf
.tailroom
= tailroom
;
3060 * Free a key schedule, including OpenSSL components.
3063 key_schedule_free(struct key_schedule
*ks
, bool free_ssl_ctx
)
3065 free_key_ctx_bi(&ks
->static_key
);
3066 if (tls_ctx_initialised(&ks
->ssl_ctx
) && free_ssl_ctx
)
3068 tls_ctx_free(&ks
->ssl_ctx
);
3069 free_key_ctx(&ks
->auth_token_key
);
3075 init_crypto_pre(struct context
*c
, const unsigned int flags
)
3077 if (c
->options
.engine
)
3079 crypto_init_lib_engine(c
->options
.engine
);
3082 if (flags
& CF_LOAD_PERSISTED_PACKET_ID
)
3084 /* load a persisted packet-id for cross-session replay-protection */
3085 if (c
->options
.packet_id_file
)
3087 packet_id_persist_load(&c
->c1
.pid_persist
, c
->options
.packet_id_file
);
3091 #ifdef ENABLE_PREDICTION_RESISTANCE
3092 if (c
->options
.use_prediction_resistance
)
3094 rand_ctx_enable_prediction_resistance();
3100 * Static Key Mode (using a pre-shared key)
3103 do_init_crypto_static(struct context
*c
, const unsigned int flags
)
3105 const struct options
*options
= &c
->options
;
3106 ASSERT(options
->shared_secret_file
);
3108 init_crypto_pre(c
, flags
);
3110 /* Initialize flags */
3111 if (c
->options
.mute_replay_warnings
)
3113 c
->c2
.crypto_options
.flags
|= CO_MUTE_REPLAY_WARNINGS
;
3116 /* Initialize packet ID tracking */
3117 packet_id_init(&c
->c2
.crypto_options
.packet_id
,
3118 options
->replay_window
,
3119 options
->replay_time
,
3121 c
->c2
.crypto_options
.pid_persist
= &c
->c1
.pid_persist
;
3122 c
->c2
.crypto_options
.flags
|= CO_PACKET_ID_LONG_FORM
;
3123 packet_id_persist_load_obj(&c
->c1
.pid_persist
,
3124 &c
->c2
.crypto_options
.packet_id
);
3126 if (!key_ctx_bi_defined(&c
->c1
.ks
.static_key
))
3128 /* Get cipher & hash algorithms */
3129 init_key_type(&c
->c1
.ks
.key_type
, options
->ciphername
, options
->authname
,
3130 options
->test_crypto
, true);
3132 /* Read cipher and hmac keys from shared secret file */
3133 crypto_read_openvpn_key(&c
->c1
.ks
.key_type
, &c
->c1
.ks
.static_key
,
3134 options
->shared_secret_file
,
3135 options
->shared_secret_file_inline
,
3136 options
->key_direction
, "Static Key Encryption",
3141 msg(M_INFO
, "Re-using pre-shared static key");
3144 /* Get key schedule */
3145 c
->c2
.crypto_options
.key_ctx_bi
= c
->c1
.ks
.static_key
;
3149 * Initialize the tls-auth/crypt key context
3152 do_init_tls_wrap_key(struct context
*c
)
3154 const struct options
*options
= &c
->options
;
3156 /* TLS handshake authentication (--tls-auth) */
3157 if (options
->ce
.tls_auth_file
)
3159 /* Initialize key_type for tls-auth with auth only */
3160 CLEAR(c
->c1
.ks
.tls_auth_key_type
);
3161 c
->c1
.ks
.tls_auth_key_type
.cipher
= "none";
3162 c
->c1
.ks
.tls_auth_key_type
.digest
= options
->authname
;
3163 if (!md_valid(options
->authname
))
3165 msg(M_FATAL
, "ERROR: tls-auth enabled, but no valid --auth "
3166 "algorithm specified ('%s')", options
->authname
);
3169 crypto_read_openvpn_key(&c
->c1
.ks
.tls_auth_key_type
,
3170 &c
->c1
.ks
.tls_wrap_key
,
3171 options
->ce
.tls_auth_file
,
3172 options
->ce
.tls_auth_file_inline
,
3173 options
->ce
.key_direction
,
3174 "Control Channel Authentication", "tls-auth",
3175 &c
->c1
.ks
.original_wrap_keydata
);
3178 /* TLS handshake encryption+authentication (--tls-crypt) */
3179 if (options
->ce
.tls_crypt_file
)
3181 tls_crypt_init_key(&c
->c1
.ks
.tls_wrap_key
,
3182 &c
->c1
.ks
.original_wrap_keydata
,
3183 options
->ce
.tls_crypt_file
,
3184 options
->ce
.tls_crypt_file_inline
,
3185 options
->tls_server
);
3188 /* tls-crypt with client-specific keys (--tls-crypt-v2) */
3189 if (options
->ce
.tls_crypt_v2_file
)
3191 if (options
->tls_server
)
3193 tls_crypt_v2_init_server_key(&c
->c1
.ks
.tls_crypt_v2_server_key
,
3194 true, options
->ce
.tls_crypt_v2_file
,
3195 options
->ce
.tls_crypt_v2_file_inline
);
3199 tls_crypt_v2_init_client_key(&c
->c1
.ks
.tls_wrap_key
,
3200 &c
->c1
.ks
.original_wrap_keydata
,
3201 &c
->c1
.ks
.tls_crypt_v2_wkc
,
3202 options
->ce
.tls_crypt_v2_file
,
3203 options
->ce
.tls_crypt_v2_file_inline
);
3205 /* We have to ensure that the loaded tls-crypt key is small enough
3206 * to fit into the initial hard reset v3 packet */
3207 int wkc_len
= buf_len(&c
->c1
.ks
.tls_crypt_v2_wkc
);
3209 /* empty ACK/message id, tls-crypt, Opcode, UDP, ipv6 */
3210 int required_size
= 5 + wkc_len
+ tls_crypt_buf_overhead() + 1 + 8 + 40;
3212 if (required_size
> c
->options
.ce
.tls_mtu
)
3214 msg(M_WARN
, "ERROR: tls-crypt-v2 client key too large to work with "
3215 "requested --max-packet-size %d, requires at least "
3216 "--max-packet-size %d. Packets will ignore requested "
3217 "maximum packet size", c
->options
.ce
.tls_mtu
,
3226 * Initialize the persistent component of OpenVPN's TLS mode,
3227 * which is preserved across SIGUSR1 resets.
3230 do_init_crypto_tls_c1(struct context
*c
)
3232 const struct options
*options
= &c
->options
;
3234 if (!tls_ctx_initialised(&c
->c1
.ks
.ssl_ctx
))
3237 * Initialize the OpenSSL library's global
3240 init_ssl(options
, &(c
->c1
.ks
.ssl_ctx
), c
->c0
&& c
->c0
->uid_gid_chroot_set
);
3241 if (!tls_ctx_initialised(&c
->c1
.ks
.ssl_ctx
))
3243 switch (auth_retry_get())
3246 msg(M_FATAL
, "Error: private key password verification failed");
3250 ssl_purge_auth(false);
3251 /* Intentional [[fallthrough]]; */
3254 /* SOFT-SIGUSR1 -- Password failure error */
3255 register_signal(c
->sig
, SIGUSR1
, "private-key-password-failure");
3265 * BF-CBC is allowed to be used only when explicitly configured
3266 * as NCP-fallback or when NCP has been disabled or explicitly
3267 * allowed in the in ncp_ciphers list.
3268 * In all other cases do not attempt to initialize BF-CBC as it
3269 * may not even be supported by the underlying SSL library.
3271 * Therefore, the key structure has to be initialized when:
3272 * - any non-BF-CBC cipher was selected; or
3273 * - BF-CBC is selected, NCP is enabled and fallback is enabled
3274 * (BF-CBC will be the fallback).
3275 * - BF-CBC is in data-ciphers and we negotiate to use BF-CBC:
3276 * If the negotiated cipher and options->ciphername are the
3277 * same we do not reinit the cipher
3279 * Note that BF-CBC will still be part of the OCC string to retain
3280 * backwards compatibility with older clients.
3282 const char *ciphername
= options
->ciphername
;
3283 if (streq(options
->ciphername
, "BF-CBC")
3284 && !tls_item_in_cipher_list("BF-CBC", options
->ncp_ciphers
)
3285 && !options
->enable_ncp_fallback
)
3287 ciphername
= "none";
3290 /* Do not warn if the cipher is used only in OCC */
3291 bool warn
= options
->enable_ncp_fallback
;
3292 init_key_type(&c
->c1
.ks
.key_type
, ciphername
, options
->authname
,
3295 /* initialize tls-auth/crypt/crypt-v2 key */
3296 do_init_tls_wrap_key(c
);
3298 /* initialise auth-token crypto support */
3299 if (c
->options
.auth_token_generate
)
3301 auth_token_init_secret(&c
->c1
.ks
.auth_token_key
,
3302 c
->options
.auth_token_secret_file
,
3303 c
->options
.auth_token_secret_file_inline
);
3306 #if 0 /* was: #if ENABLE_INLINE_FILES -- Note that enabling this code will break restarts */
3307 if (options
->priv_key_file_inline
)
3309 string_clear(c
->options
.priv_key_file_inline
);
3310 c
->options
.priv_key_file_inline
= NULL
;
3316 msg(D_INIT_MEDIUM
, "Re-using SSL/TLS context");
3319 * tls-auth/crypt key can be configured per connection block, therefore
3320 * we must reload it as it may have changed
3322 do_init_tls_wrap_key(c
);
3327 do_init_crypto_tls(struct context
*c
, const unsigned int flags
)
3329 const struct options
*options
= &c
->options
;
3330 struct tls_options to
;
3331 bool packet_id_long_form
;
3333 ASSERT(options
->tls_server
|| options
->tls_client
);
3334 ASSERT(!options
->test_crypto
);
3336 init_crypto_pre(c
, flags
);
3338 /* Make sure we are either a TLS client or server but not both */
3339 ASSERT(options
->tls_server
== !options
->tls_client
);
3341 /* initialize persistent component */
3342 do_init_crypto_tls_c1(c
);
3348 /* In short form, unique datagram identifier is 32 bits, in long form 64 bits */
3349 packet_id_long_form
= cipher_kt_mode_ofb_cfb(c
->c1
.ks
.key_type
.cipher
);
3351 /* Set all command-line TLS-related options */
3354 if (options
->mute_replay_warnings
)
3356 to
.crypto_flags
|= CO_MUTE_REPLAY_WARNINGS
;
3359 to
.crypto_flags
&= ~(CO_PACKET_ID_LONG_FORM
);
3360 if (packet_id_long_form
)
3362 to
.crypto_flags
|= CO_PACKET_ID_LONG_FORM
;
3365 to
.ssl_ctx
= c
->c1
.ks
.ssl_ctx
;
3366 to
.key_type
= c
->c1
.ks
.key_type
;
3367 to
.server
= options
->tls_server
;
3368 to
.replay_window
= options
->replay_window
;
3369 to
.replay_time
= options
->replay_time
;
3370 to
.config_ciphername
= c
->options
.ciphername
;
3371 to
.config_ncp_ciphers
= c
->options
.ncp_ciphers
;
3372 to
.transition_window
= options
->transition_window
;
3373 to
.handshake_window
= options
->handshake_window
;
3374 to
.packet_timeout
= options
->tls_timeout
;
3375 to
.renegotiate_bytes
= options
->renegotiate_bytes
;
3376 to
.renegotiate_packets
= options
->renegotiate_packets
;
3377 if (options
->renegotiate_seconds_min
< 0)
3379 /* Add 10% jitter to reneg-sec by default (server side only) */
3380 int auto_jitter
= options
->mode
!= MODE_SERVER
? 0 :
3381 get_random() % max_int(options
->renegotiate_seconds
/ 10, 1);
3382 to
.renegotiate_seconds
= options
->renegotiate_seconds
- auto_jitter
;
3386 /* Add user-specified jitter to reneg-sec */
3387 to
.renegotiate_seconds
= options
->renegotiate_seconds
3388 -(get_random() % max_int(options
->renegotiate_seconds
3389 - options
->renegotiate_seconds_min
, 1));
3391 to
.single_session
= options
->single_session
;
3392 to
.mode
= options
->mode
;
3393 to
.pull
= options
->pull
;
3394 if (options
->push_peer_info
) /* all there is */
3396 to
.push_peer_info_detail
= 3;
3398 else if (options
->pull
) /* pull clients send some details */
3400 to
.push_peer_info_detail
= 2;
3402 else if (options
->mode
== MODE_SERVER
) /* server: no peer info at all */
3404 to
.push_peer_info_detail
= 0;
3406 else /* default: minimal info to allow NCP in P2P mode */
3408 to
.push_peer_info_detail
= 1;
3411 /* Check if the DCO drivers support the epoch data format */
3412 if (dco_enabled(options
))
3414 to
.data_epoch_supported
= dco_supports_epoch_data(c
);
3418 to
.data_epoch_supported
= true;
3421 /* should we not xmit any packets until we get an initial
3422 * response from client? */
3423 if (to
.server
&& c
->mode
== CM_CHILD_TCP
)
3425 to
.xmit_hold
= true;
3428 to
.verify_command
= options
->tls_verify
;
3429 to
.verify_x509_type
= (options
->verify_x509_type
& 0xff);
3430 to
.verify_x509_name
= options
->verify_x509_name
;
3431 to
.crl_file
= options
->crl_file
;
3432 to
.crl_file_inline
= options
->crl_file_inline
;
3433 to
.ssl_flags
= options
->ssl_flags
;
3434 to
.ns_cert_type
= options
->ns_cert_type
;
3435 memcpy(to
.remote_cert_ku
, options
->remote_cert_ku
, sizeof(to
.remote_cert_ku
));
3436 to
.remote_cert_eku
= options
->remote_cert_eku
;
3437 to
.verify_hash
= options
->verify_hash
;
3438 to
.verify_hash_algo
= options
->verify_hash_algo
;
3439 to
.verify_hash_depth
= options
->verify_hash_depth
;
3440 to
.verify_hash_no_ca
= options
->verify_hash_no_ca
;
3441 #ifdef ENABLE_X509ALTUSERNAME
3442 memcpy(to
.x509_username_field
, options
->x509_username_field
, sizeof(to
.x509_username_field
));
3444 to
.x509_username_field
[0] = X509_USERNAME_FIELD_DEFAULT
;
3447 to
.net_ctx
= &c
->net_ctx
;
3450 to
.gremlin
= c
->options
.gremlin
;
3453 to
.plugins
= c
->plugins
;
3455 #ifdef ENABLE_MANAGEMENT
3456 to
.mda_context
= &c
->c2
.mda_context
;
3459 to
.auth_user_pass_verify_script
= options
->auth_user_pass_verify_script
;
3460 to
.auth_user_pass_verify_script_via_file
= options
->auth_user_pass_verify_script_via_file
;
3461 to
.client_crresponse_script
= options
->client_crresponse_script
;
3462 to
.tmp_dir
= options
->tmp_dir
;
3463 to
.export_peer_cert_dir
= options
->tls_export_peer_cert_dir
;
3464 if (options
->ccd_exclusive
)
3466 to
.client_config_dir_exclusive
= options
->client_config_dir
;
3468 to
.auth_user_pass_file
= options
->auth_user_pass_file
;
3469 to
.auth_user_pass_file_inline
= options
->auth_user_pass_file_inline
;
3470 to
.auth_token_generate
= options
->auth_token_generate
;
3471 to
.auth_token_lifetime
= options
->auth_token_lifetime
;
3472 to
.auth_token_renewal
= options
->auth_token_renewal
;
3473 to
.auth_token_call_auth
= options
->auth_token_call_auth
;
3474 to
.auth_token_key
= c
->c1
.ks
.auth_token_key
;
3476 to
.x509_track
= options
->x509_track
;
3478 #ifdef ENABLE_MANAGEMENT
3479 to
.sci
= &options
->sc_info
;
3483 to
.comp_options
= options
->comp
;
3486 if (options
->keying_material_exporter_label
)
3488 to
.ekm_size
= options
->keying_material_exporter_length
;
3489 if (to
.ekm_size
< 16 || to
.ekm_size
> 4095)
3494 to
.ekm_label
= options
->keying_material_exporter_label
;
3495 to
.ekm_label_size
= strlen(to
.ekm_label
);
3502 /* TLS handshake authentication (--tls-auth) */
3503 if (options
->ce
.tls_auth_file
)
3505 to
.tls_wrap
.mode
= TLS_WRAP_AUTH
;
3508 /* TLS handshake encryption (--tls-crypt) */
3509 if (options
->ce
.tls_crypt_file
3510 || (options
->ce
.tls_crypt_v2_file
&& options
->tls_client
))
3512 to
.tls_wrap
.mode
= TLS_WRAP_CRYPT
;
3515 if (to
.tls_wrap
.mode
== TLS_WRAP_AUTH
|| to
.tls_wrap
.mode
== TLS_WRAP_CRYPT
)
3517 to
.tls_wrap
.opt
.key_ctx_bi
= c
->c1
.ks
.tls_wrap_key
;
3518 to
.tls_wrap
.opt
.pid_persist
= &c
->c1
.pid_persist
;
3519 to
.tls_wrap
.opt
.flags
|= CO_PACKET_ID_LONG_FORM
;
3520 to
.tls_wrap
.original_wrap_keydata
= c
->c1
.ks
.original_wrap_keydata
;
3523 if (options
->ce
.tls_crypt_v2_file
)
3525 to
.tls_crypt_v2
= true;
3526 to
.tls_wrap
.tls_crypt_v2_wkc
= &c
->c1
.ks
.tls_crypt_v2_wkc
;
3528 if (options
->tls_server
)
3530 to
.tls_wrap
.tls_crypt_v2_server_key
= c
->c1
.ks
.tls_crypt_v2_server_key
;
3531 to
.tls_crypt_v2_verify_script
= c
->options
.tls_crypt_v2_verify_script
;
3532 if (options
->ce
.tls_crypt_v2_force_cookie
)
3534 to
.tls_wrap
.opt
.flags
|= CO_FORCE_TLSCRYPTV2_COOKIE
;
3539 /* let the TLS engine know if keys have to be installed in DCO or not */
3540 to
.dco_enabled
= dco_enabled(options
);
3543 * Initialize OpenVPN's master TLS-mode object.
3545 if (flags
& CF_INIT_TLS_MULTI
)
3547 c
->c2
.tls_multi
= tls_multi_init(&to
);
3548 /* inherit the dco context from the tuntap object */
3551 c
->c2
.tls_multi
->dco
= &c
->c1
.tuntap
->dco
;
3555 if (flags
& CF_INIT_TLS_AUTH_STANDALONE
)
3557 c
->c2
.tls_auth_standalone
= tls_auth_standalone_init(&to
, &c
->c2
.gc
);
3558 c
->c2
.session_id_hmac
= session_id_hmac_init();
3563 do_init_frame_tls(struct context
*c
)
3565 if (c
->c2
.tls_multi
)
3567 tls_multi_init_finalize(c
->c2
.tls_multi
, c
->options
.ce
.tls_mtu
);
3568 ASSERT(c
->c2
.tls_multi
->opt
.frame
.buf
.payload_size
<=
3569 c
->c2
.frame
.buf
.payload_size
);
3570 frame_print(&c
->c2
.tls_multi
->opt
.frame
, D_MTU_INFO
,
3571 "Control Channel MTU parms");
3573 /* Keep the max mtu also in the frame of tls multi so it can access
3574 * it in push_peer_info */
3575 c
->c2
.tls_multi
->opt
.frame
.tun_max_mtu
= c
->c2
.frame
.tun_max_mtu
;
3577 if (c
->c2
.tls_auth_standalone
)
3579 tls_init_control_channel_frame_parameters(&c
->c2
.tls_auth_standalone
->frame
, c
->options
.ce
.tls_mtu
);
3580 frame_print(&c
->c2
.tls_auth_standalone
->frame
, D_MTU_INFO
,
3581 "TLS-Auth MTU parms");
3582 c
->c2
.tls_auth_standalone
->tls_wrap
.work
= alloc_buf_gc(BUF_SIZE(&c
->c2
.frame
), &c
->c2
.gc
);
3583 c
->c2
.tls_auth_standalone
->workbuf
= alloc_buf_gc(BUF_SIZE(&c
->c2
.frame
), &c
->c2
.gc
);
3588 * No encryption or authentication.
3591 do_init_crypto_none(struct context
*c
)
3593 ASSERT(!c
->options
.test_crypto
);
3595 /* Initialise key_type with auth/cipher "none", so the key_type struct is
3597 init_key_type(&c
->c1
.ks
.key_type
, "none", "none",
3598 c
->options
.test_crypto
, true);
3601 "******* WARNING *******: All encryption and authentication features "
3602 "disabled -- All data will be tunnelled as clear text and will not be "
3603 "protected against man-in-the-middle changes. "
3604 "PLEASE DO RECONSIDER THIS CONFIGURATION!");
3608 do_init_crypto(struct context
*c
, const unsigned int flags
)
3610 if (c
->options
.shared_secret_file
)
3612 do_init_crypto_static(c
, flags
);
3614 else if (c
->options
.tls_server
|| c
->options
.tls_client
)
3616 do_init_crypto_tls(c
, flags
);
3618 else /* no encryption or authentication. */
3620 do_init_crypto_none(c
);
3625 do_init_frame(struct context
*c
)
3628 * Adjust frame size based on the --tun-mtu-extra parameter.
3630 if (c
->options
.ce
.tun_mtu_extra_defined
)
3632 c
->c2
.frame
.extra_tun
+= c
->options
.ce
.tun_mtu_extra
;
3636 * Fill in the blanks in the frame parameters structure,
3637 * make sure values are rational, etc.
3639 frame_finalize_options(c
, NULL
);
3642 #if defined(ENABLE_FRAGMENT)
3646 if (c
->options
.ce
.fragment
&& c
->options
.mtu_test
)
3649 "WARNING: using --fragment and --mtu-test together may produce an inaccurate MTU test result");
3653 #ifdef ENABLE_FRAGMENT
3654 if (c
->options
.ce
.fragment
> 0 && c
->options
.ce
.mssfix
> c
->options
.ce
.fragment
)
3656 msg(M_WARN
, "WARNING: if you use --mssfix and --fragment, you should "
3657 "set --fragment (%d) larger or equal than --mssfix (%d)",
3658 c
->options
.ce
.fragment
, c
->options
.ce
.mssfix
);
3660 if (c
->options
.ce
.fragment
> 0 && c
->options
.ce
.mssfix
> 0
3661 && c
->options
.ce
.fragment_encap
!= c
->options
.ce
.mssfix_encap
)
3663 msg(M_WARN
, "WARNING: if you use --mssfix and --fragment, you should "
3664 "use the \"mtu\" flag for both or none of of them.");
3670 do_option_warnings(struct context
*c
)
3672 const struct options
*o
= &c
->options
;
3674 if (o
->ping_send_timeout
&& !o
->ping_rec_timeout
)
3676 msg(M_WARN
, "WARNING: --ping should normally be used with --ping-restart or --ping-exit");
3679 if (o
->username
|| o
->groupname
|| o
->chroot_dir
3680 #ifdef ENABLE_SELINUX
3681 || o
->selinux_context
3685 if (!o
->persist_tun
)
3687 msg(M_WARN
, "WARNING: you are using user/group/chroot/setcon without persist-tun -- this may cause restarts to fail");
3691 if (o
->chroot_dir
&& !(o
->username
&& o
->groupname
))
3693 msg(M_WARN
, "WARNING: you are using chroot without specifying user and group -- this may cause the chroot jail to be insecure");
3696 if (o
->pull
&& o
->ifconfig_local
&& c
->first_time
)
3698 msg(M_WARN
, "WARNING: using --pull/--client and --ifconfig together is probably not what you want");
3701 if (o
->server_bridge_defined
|| o
->server_bridge_proxy_dhcp
)
3703 msg(M_WARN
, "NOTE: when bridging your LAN adapter with the TAP adapter, note that the new bridge adapter will often take on its own IP address that is different from what the LAN adapter was previously set to");
3706 if (o
->mode
== MODE_SERVER
)
3708 if (o
->duplicate_cn
&& o
->client_config_dir
)
3710 msg(M_WARN
, "WARNING: using --duplicate-cn and --client-config-dir together is probably not what you want");
3712 if (o
->duplicate_cn
&& o
->ifconfig_pool_persist_filename
)
3714 msg(M_WARN
, "WARNING: --ifconfig-pool-persist will not work with --duplicate-cn");
3716 if (!o
->keepalive_ping
|| !o
->keepalive_timeout
)
3718 msg(M_WARN
, "WARNING: --keepalive option is missing from server config");
3724 warn_on_use_of_common_subnets(&c
->net_ctx
);
3728 && o
->verify_x509_type
== VERIFY_X509_NONE
3729 && !(o
->ns_cert_type
& NS_CERT_CHECK_SERVER
)
3730 && !o
->remote_cert_eku
3731 && !(o
->verify_hash_depth
== 0 && o
->verify_hash
))
3733 msg(M_WARN
, "WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.");
3735 if (o
->ns_cert_type
)
3737 msg(M_WARN
, "WARNING: --ns-cert-type is DEPRECATED. Use --remote-cert-tls instead.");
3740 /* If a script is used, print appropriate warnings */
3741 if (o
->user_script_used
)
3743 if (script_security() >= SSEC_SCRIPTS
)
3745 msg(M_WARN
, "NOTE: the current --script-security setting may allow this configuration to call user-defined scripts");
3747 else if (script_security() >= SSEC_PW_ENV
)
3749 msg(M_WARN
, "WARNING: the current --script-security setting may allow passwords to be passed to scripts via environmental variables");
3753 msg(M_WARN
, "NOTE: starting with " PACKAGE_NAME
" 2.1, '--script-security 2' or higher is required to call user-defined scripts or executables");
3758 struct context_buffers
*
3759 init_context_buffers(const struct frame
*frame
)
3761 struct context_buffers
*b
;
3763 ALLOC_OBJ_CLEAR(b
, struct context_buffers
);
3765 size_t buf_size
= BUF_SIZE(frame
);
3767 b
->read_link_buf
= alloc_buf(buf_size
);
3768 b
->read_tun_buf
= alloc_buf(buf_size
);
3770 b
->aux_buf
= alloc_buf(buf_size
);
3772 b
->encrypt_buf
= alloc_buf(buf_size
);
3773 b
->decrypt_buf
= alloc_buf(buf_size
);
3776 b
->compress_buf
= alloc_buf(buf_size
);
3777 b
->decompress_buf
= alloc_buf(buf_size
);
3784 free_context_buffers(struct context_buffers
*b
)
3788 free_buf(&b
->read_link_buf
);
3789 free_buf(&b
->read_tun_buf
);
3790 free_buf(&b
->aux_buf
);
3793 free_buf(&b
->compress_buf
);
3794 free_buf(&b
->decompress_buf
);
3797 free_buf(&b
->encrypt_buf
);
3798 free_buf(&b
->decrypt_buf
);
3805 * Now that we know all frame parameters, initialize
3809 do_init_buffers(struct context
*c
)
3811 c
->c2
.buffers
= init_context_buffers(&c
->c2
.frame
);
3812 c
->c2
.buffers_owned
= true;
3815 #ifdef ENABLE_FRAGMENT
3817 * Fragmenting code has buffers to initialize
3818 * once frame parameters are known.
3821 do_init_fragment(struct context
*c
)
3823 ASSERT(c
->options
.ce
.fragment
);
3826 * Set frame parameter for fragment code. This is necessary because
3827 * the fragmentation code deals with payloads which have already been
3828 * passed through the compression code.
3830 c
->c2
.frame_fragment
= c
->c2
.frame
;
3832 frame_calculate_dynamic(&c
->c2
.frame_fragment
, &c
->c1
.ks
.key_type
,
3833 &c
->options
, get_link_socket_info(c
));
3834 fragment_frame_init(c
->c2
.fragment
, &c
->c2
.frame_fragment
);
3839 * Allocate our socket object.
3842 do_link_socket_new(struct context
*c
)
3844 ASSERT(!c
->c2
.link_sockets
);
3846 ALLOC_ARRAY_GC(c
->c2
.link_sockets
, struct link_socket
*,
3847 c
->c1
.link_sockets_num
, &c
->c2
.gc
);
3849 for (int i
= 0; i
< c
->c1
.link_sockets_num
; i
++)
3851 c
->c2
.link_sockets
[i
] = link_socket_new();
3853 c
->c2
.link_socket_owned
= true;
3857 * bind TCP/UDP sockets
3860 do_init_socket_phase1(struct context
*c
)
3862 for (int i
= 0; i
< c
->c1
.link_sockets_num
; i
++)
3864 int mode
= LS_MODE_DEFAULT
;
3866 /* mode allows CM_CHILD_TCP
3867 * instances to inherit acceptable fds
3868 * from a top-level parent */
3869 if (c
->options
.mode
== MODE_SERVER
)
3871 /* initializing listening socket */
3872 if (c
->mode
== CM_TOP
)
3874 mode
= LS_MODE_TCP_LISTEN
;
3876 /* initializing socket to client */
3877 else if (c
->mode
== CM_CHILD_TCP
)
3879 mode
= LS_MODE_TCP_ACCEPT_FROM
;
3883 /* init each socket with its specific args */
3884 link_socket_init_phase1(c
, i
, mode
);
3889 * finalize TCP/UDP sockets
3892 do_init_socket_phase2(struct context
*c
)
3894 for (int i
= 0; i
< c
->c1
.link_sockets_num
; i
++)
3896 link_socket_init_phase2(c
, c
->c2
.link_sockets
[i
]);
3904 do_print_data_channel_mtu_parms(struct context
*c
)
3906 frame_print(&c
->c2
.frame
, D_MTU_INFO
, "Data Channel MTU parms");
3907 #ifdef ENABLE_FRAGMENT
3910 frame_print(&c
->c2
.frame_fragment
, D_MTU_INFO
,
3911 "Fragmentation MTU parms");
3917 * Get local and remote options compatibility strings.
3920 do_compute_occ_strings(struct context
*c
)
3922 struct gc_arena gc
= gc_new();
3924 c
->c2
.options_string_local
=
3925 options_string(&c
->options
, &c
->c2
.frame
, c
->c1
.tuntap
, &c
->net_ctx
,
3927 c
->c2
.options_string_remote
=
3928 options_string(&c
->options
, &c
->c2
.frame
, c
->c1
.tuntap
, &c
->net_ctx
,
3931 msg(D_SHOW_OCC
, "Local Options String (VER=%s): '%s'",
3932 options_string_version(c
->c2
.options_string_local
, &gc
),
3933 c
->c2
.options_string_local
);
3934 msg(D_SHOW_OCC
, "Expected Remote Options String (VER=%s): '%s'",
3935 options_string_version(c
->c2
.options_string_remote
, &gc
),
3936 c
->c2
.options_string_remote
);
3938 if (c
->c2
.tls_multi
)
3940 tls_multi_init_set_options(c
->c2
.tls_multi
,
3941 c
->c2
.options_string_local
,
3942 c
->c2
.options_string_remote
);
3949 * These things can only be executed once per program instantiation.
3950 * Set up for possible UID/GID downgrade, but don't do it yet.
3951 * Daemonize if requested.
3954 do_init_first_time(struct context
*c
)
3956 if (c
->first_time
&& !c
->c0
)
3958 struct context_0
*c0
;
3960 ALLOC_OBJ_CLEAR_GC(c
->c0
, struct context_0
, &c
->gc
);
3963 /* get user and/or group that we want to setuid/setgid to,
3964 * sets also platform_x_state */
3965 bool group_defined
= platform_group_get(c
->options
.groupname
,
3966 &c0
->platform_state_group
);
3967 bool user_defined
= platform_user_get(c
->options
.username
,
3968 &c0
->platform_state_user
);
3970 c0
->uid_gid_specified
= user_defined
|| group_defined
;
3972 /* fork the dns script runner to preserve root? */
3973 c
->persist
.duri
.required
= user_defined
;
3975 /* perform postponed chdir if --daemon */
3976 if (c
->did_we_daemonize
&& c
->options
.cd_dir
== NULL
)
3978 platform_chdir("/");
3981 /* should we change scheduling priority? */
3982 platform_nice(c
->options
.nice
);
3990 do_close_free_buf(struct context
*c
)
3992 if (c
->c2
.buffers_owned
)
3994 free_context_buffers(c
->c2
.buffers
);
3995 c
->c2
.buffers
= NULL
;
3996 c
->c2
.buffers_owned
= false;
4004 do_close_tls(struct context
*c
)
4006 if (c
->c2
.tls_multi
)
4008 tls_multi_free(c
->c2
.tls_multi
, true);
4009 c
->c2
.tls_multi
= NULL
;
4012 /* free options compatibility strings */
4013 free(c
->c2
.options_string_local
);
4014 free(c
->c2
.options_string_remote
);
4016 c
->c2
.options_string_local
= c
->c2
.options_string_remote
= NULL
;
4018 if (c
->c2
.pulled_options_state
)
4020 md_ctx_cleanup(c
->c2
.pulled_options_state
);
4021 md_ctx_free(c
->c2
.pulled_options_state
);
4024 tls_auth_standalone_free(c
->c2
.tls_auth_standalone
);
4028 * Free key schedules
4031 do_close_free_key_schedule(struct context
*c
, bool free_ssl_ctx
)
4034 * always free the tls_auth/crypt key. The key will
4035 * be reloaded from memory (pre-cached)
4037 free_key_ctx(&c
->c1
.ks
.tls_crypt_v2_server_key
);
4038 free_key_ctx_bi(&c
->c1
.ks
.tls_wrap_key
);
4039 CLEAR(c
->c1
.ks
.tls_wrap_key
);
4040 buf_clear(&c
->c1
.ks
.tls_crypt_v2_wkc
);
4041 free_buf(&c
->c1
.ks
.tls_crypt_v2_wkc
);
4043 if (!(c
->sig
->signal_received
== SIGUSR1
))
4045 key_schedule_free(&c
->c1
.ks
, free_ssl_ctx
);
4050 * Close TCP/UDP connection
4053 do_close_link_socket(struct context
*c
)
4055 if (c
->c2
.link_sockets
&& c
->c2
.link_socket_owned
)
4057 for (int i
= 0; i
< c
->c1
.link_sockets_num
; i
++)
4059 /* in dco-win case, link socket is a tun handle which is
4060 * closed in do_close_tun(). Set it to UNDEFINED so
4061 * we won't use WinSock API to close it. */
4062 if (tuntap_is_dco_win(c
->c1
.tuntap
))
4064 c
->c2
.link_sockets
[i
]->sd
= SOCKET_UNDEFINED
;
4067 link_socket_close(c
->c2
.link_sockets
[i
]);
4069 c
->c2
.link_sockets
= NULL
;
4073 /* Preserve the resolved list of remote if the user request to or if we want
4074 * reconnect to the same host again or there are still addresses that need
4076 if (!(c
->sig
->signal_received
== SIGUSR1
4077 && ( (c
->options
.persist_remote_ip
)
4079 ( c
->sig
->source
!= SIG_SOURCE_HARD
4080 && ((c
->c1
.link_socket_addrs
[0].current_remote
4081 && c
->c1
.link_socket_addrs
[0].current_remote
->ai_next
)
4082 || c
->options
.no_advance
))
4085 clear_remote_addrlist(&c
->c1
.link_socket_addrs
[0],
4086 !c
->options
.resolve_in_advance
);
4089 /* Clear the remote actual address when persist_remote_ip is not in use */
4090 if (!(c
->sig
->signal_received
== SIGUSR1
&& c
->options
.persist_remote_ip
))
4092 for (int i
= 0; i
< c
->c1
.link_sockets_num
; i
++)
4094 CLEAR(c
->c1
.link_socket_addrs
[i
].actual
);
4098 if (!(c
->sig
->signal_received
== SIGUSR1
&& c
->options
.persist_local_ip
))
4100 for (int i
= 0; i
< c
->c1
.link_sockets_num
; i
++)
4102 if (c
->c1
.link_socket_addrs
[i
].bind_local
4103 && !c
->options
.resolve_in_advance
)
4105 freeaddrinfo(c
->c1
.link_socket_addrs
[i
].bind_local
);
4108 c
->c1
.link_socket_addrs
[i
].bind_local
= NULL
;
4114 * Close packet-id persistence file
4117 do_close_packet_id(struct context
*c
)
4119 packet_id_free(&c
->c2
.crypto_options
.packet_id
);
4120 packet_id_persist_save(&c
->c1
.pid_persist
);
4121 if (!(c
->sig
->signal_received
== SIGUSR1
))
4123 packet_id_persist_close(&c
->c1
.pid_persist
);
4127 #ifdef ENABLE_FRAGMENT
4129 * Close fragmentation handler.
4132 do_close_fragment(struct context
*c
)
4136 fragment_free(c
->c2
.fragment
);
4137 c
->c2
.fragment
= NULL
;
4143 * Open and close our event objects.
4147 do_event_set_init(struct context
*c
,
4148 bool need_us_timeout
)
4150 unsigned int flags
= 0;
4152 c
->c2
.event_set_max
= BASE_N_EVENTS
;
4154 flags
|= EVENT_METHOD_FAST
;
4156 if (need_us_timeout
)
4158 flags
|= EVENT_METHOD_US_TIMEOUT
;
4161 c
->c2
.event_set
= event_set_init(&c
->c2
.event_set_max
, flags
);
4162 c
->c2
.event_set_owned
= true;
4166 do_close_event_set(struct context
*c
)
4168 if (c
->c2
.event_set
&& c
->c2
.event_set_owned
)
4170 event_free(c
->c2
.event_set
);
4171 c
->c2
.event_set
= NULL
;
4172 c
->c2
.event_set_owned
= false;
4177 * Open and close --status file
4181 do_open_status_output(struct context
*c
)
4183 if (!c
->c1
.status_output
)
4185 c
->c1
.status_output
= status_open(c
->options
.status_file
,
4186 c
->options
.status_file_update_freq
,
4189 STATUS_OUTPUT_WRITE
);
4190 c
->c1
.status_output_owned
= true;
4195 do_close_status_output(struct context
*c
)
4197 if (!(c
->sig
->signal_received
== SIGUSR1
))
4199 if (c
->c1
.status_output_owned
&& c
->c1
.status_output
)
4201 status_close(c
->c1
.status_output
);
4202 c
->c1
.status_output
= NULL
;
4203 c
->c1
.status_output_owned
= false;
4209 * Handle ifconfig-pool persistence object.
4212 do_open_ifconfig_pool_persist(struct context
*c
)
4214 if (!c
->c1
.ifconfig_pool_persist
&& c
->options
.ifconfig_pool_persist_filename
)
4216 c
->c1
.ifconfig_pool_persist
= ifconfig_pool_persist_init(c
->options
.ifconfig_pool_persist_filename
,
4217 c
->options
.ifconfig_pool_persist_refresh_freq
);
4218 c
->c1
.ifconfig_pool_persist_owned
= true;
4223 do_close_ifconfig_pool_persist(struct context
*c
)
4225 if (!(c
->sig
->signal_received
== SIGUSR1
))
4227 if (c
->c1
.ifconfig_pool_persist
&& c
->c1
.ifconfig_pool_persist_owned
)
4229 ifconfig_pool_persist_close(c
->c1
.ifconfig_pool_persist
);
4230 c
->c1
.ifconfig_pool_persist
= NULL
;
4231 c
->c1
.ifconfig_pool_persist_owned
= false;
4237 * Inherit environmental variables
4241 do_inherit_env(struct context
*c
, const struct env_set
*src
)
4243 c
->c2
.es
= env_set_create(NULL
);
4244 c
->c2
.es_owned
= true;
4245 env_set_inherit(c
->c2
.es
, src
);
4249 do_env_set_destroy(struct context
*c
)
4251 if (c
->c2
.es
&& c
->c2
.es_owned
)
4253 env_set_destroy(c
->c2
.es
);
4255 c
->c2
.es_owned
= false;
4260 * Fast I/O setup. Fast I/O is an optimization which only works
4261 * if all of the following are true:
4263 * (1) The platform is not Windows
4264 * (2) --proto udp is enabled
4265 * (3) --shaper is disabled
4268 do_setup_fast_io(struct context
*c
)
4270 if (c
->options
.fast_io
)
4273 msg(M_INFO
, "NOTE: --fast-io is disabled since we are running on Windows");
4275 if (c
->options
.shaper
)
4277 msg(M_INFO
, "NOTE: --fast-io is disabled since we are using --shaper");
4281 c
->c2
.fast_io
= true;
4288 do_signal_on_tls_errors(struct context
*c
)
4290 if (c
->options
.tls_exit
)
4292 c
->c2
.tls_exit_signal
= SIGTERM
;
4296 c
->c2
.tls_exit_signal
= SIGUSR1
;
4300 #ifdef ENABLE_PLUGIN
4303 init_plugins(struct context
*c
)
4305 if (c
->options
.plugin_list
&& !c
->plugins
)
4307 c
->plugins
= plugin_list_init(c
->options
.plugin_list
);
4308 c
->plugins_owned
= true;
4313 open_plugins(struct context
*c
, const bool import_options
, int init_point
)
4315 if (c
->plugins
&& c
->plugins_owned
)
4319 struct plugin_return pr
, config
;
4320 plugin_return_init(&pr
);
4321 plugin_list_open(c
->plugins
, c
->options
.plugin_list
, &pr
, c
->c2
.es
, init_point
);
4322 plugin_return_get_column(&pr
, &config
, "config");
4323 if (plugin_return_defined(&config
))
4326 for (i
= 0; i
< config
.n
; ++i
)
4328 unsigned int option_types_found
= 0;
4329 if (config
.list
[i
] && config
.list
[i
]->value
)
4331 options_string_import(&c
->options
,
4332 config
.list
[i
]->value
,
4333 D_IMPORT_ERRORS
|M_OPTERR
,
4334 OPT_P_DEFAULT
& ~OPT_P_PLUGIN
,
4335 &option_types_found
,
4340 plugin_return_free(&pr
);
4344 plugin_list_open(c
->plugins
, c
->options
.plugin_list
, NULL
, c
->c2
.es
, init_point
);
4350 do_close_plugins(struct context
*c
)
4352 if (c
->plugins
&& c
->plugins_owned
&& !(c
->sig
->signal_received
== SIGUSR1
))
4354 plugin_list_close(c
->plugins
);
4356 c
->plugins_owned
= false;
4361 do_inherit_plugins(struct context
*c
, const struct context
*src
)
4363 if (!c
->plugins
&& src
->plugins
)
4365 c
->plugins
= plugin_list_inherit(src
->plugins
);
4366 c
->plugins_owned
= true;
4370 #endif /* ifdef ENABLE_PLUGIN */
4372 #ifdef ENABLE_MANAGEMENT
4375 management_callback_status_p2p(void *arg
, const int version
, struct status_output
*so
)
4377 struct context
*c
= (struct context
*) arg
;
4378 print_status(c
, so
);
4382 management_show_net_callback(void *arg
, const int msglevel
)
4385 show_routes(msglevel
);
4386 show_adapters(msglevel
);
4387 msg(msglevel
, "END");
4389 msg(msglevel
, "ERROR: Sorry, this command is currently only implemented on Windows");
4393 #ifdef TARGET_ANDROID
4395 management_callback_network_change(void *arg
, bool samenetwork
)
4397 /* Check if the client should translate the network change to a SIGUSR1 to
4398 * reestablish the connection or just reprotect the socket
4400 * At the moment just assume that, for all settings that use pull (not
4401 * --static) and are not using peer-id reestablishing the connection is
4402 * required (unless the network is the same)
4404 * The function returns -1 on invalid fd and -2 if the socket cannot be
4405 * reused. On the -2 return value the man_network_change function triggers
4406 * a SIGUSR1 to force a reconnect.
4410 struct context
*c
= (struct context
*) arg
;
4411 if (!c
->c2
.link_sockets
|| !c
->c2
.link_sockets
[0])
4415 if (c
->c2
.link_sockets
[0]->sd
== SOCKET_UNDEFINED
)
4420 /* On some newer Android handsets, changing to a different network
4421 * often does not trigger a TCP reset but continue using the old
4422 * connection (e.g. using mobile connection when WiFi becomes available */
4423 struct link_socket_info
*lsi
= get_link_socket_info(c
);
4424 if (lsi
&& proto_is_tcp(lsi
->proto
) && !samenetwork
)
4429 socketfd
= c
->c2
.link_sockets
[0]->sd
;
4430 if (!c
->options
.pull
|| c
->c2
.tls_multi
->use_peer_id
|| samenetwork
)
4439 #endif /* ifdef TARGET_ANDROID */
4441 #endif /* ifdef ENABLE_MANAGEMENT */
4444 init_management_callback_p2p(struct context
*c
)
4446 #ifdef ENABLE_MANAGEMENT
4449 struct management_callback cb
;
4452 cb
.status
= management_callback_status_p2p
;
4453 cb
.show_net
= management_show_net_callback
;
4454 cb
.proxy_cmd
= management_callback_proxy_cmd
;
4455 cb
.remote_cmd
= management_callback_remote_cmd
;
4456 cb
.send_cc_message
= management_callback_send_cc_message
;
4457 #ifdef TARGET_ANDROID
4458 cb
.network_change
= management_callback_network_change
;
4460 cb
.remote_entry_count
= management_callback_remote_entry_count
;
4461 cb
.remote_entry_get
= management_callback_remote_entry_get
;
4462 management_set_callback(management
, &cb
);
4467 #ifdef ENABLE_MANAGEMENT
4470 init_management(void)
4474 management
= management_init();
4479 open_management(struct context
*c
)
4481 /* initialize management layer */
4484 if (c
->options
.management_addr
)
4486 unsigned int flags
= c
->options
.management_flags
;
4487 if (c
->options
.mode
== MODE_SERVER
)
4491 if (management_open(management
,
4492 c
->options
.management_addr
,
4493 c
->options
.management_port
,
4494 c
->options
.management_user_pass
,
4495 c
->options
.management_client_user
,
4496 c
->options
.management_client_group
,
4497 c
->options
.management_log_history_cache
,
4498 c
->options
.management_echo_buffer_size
,
4499 c
->options
.management_state_buffer_size
,
4500 c
->options
.remap_sigusr1
,
4503 management_set_state(management
,
4504 OPENVPN_STATE_CONNECTING
,
4512 /* initial management hold, called early, before first context initialization */
4516 msg(M_WARN
, "Signal received from management interface, exiting");
4529 close_management(void)
4533 management_close(management
);
4538 #endif /* ifdef ENABLE_MANAGEMENT */
4542 uninit_management_callback(void)
4544 #ifdef ENABLE_MANAGEMENT
4547 management_clear_callback(management
);
4553 persist_client_stats(struct context
*c
)
4555 #ifdef ENABLE_MANAGEMENT
4558 man_persist_client_stats(management
, c
);
4564 * Initialize a tunnel instance, handle pre and post-init
4568 init_instance_handle_signals(struct context
*c
, const struct env_set
*env
, const unsigned int flags
)
4570 pre_init_signal_catch();
4571 init_instance(c
, env
, flags
);
4572 post_init_signal_catch();
4575 * This is done so that signals thrown during
4576 * initialization can bring us back to
4577 * a management hold.
4582 uninit_management_callback();
4587 * Initialize a tunnel instance.
4590 init_instance(struct context
*c
, const struct env_set
*env
, const unsigned int flags
)
4592 const struct options
*options
= &c
->options
;
4593 const bool child
= (c
->mode
== CM_CHILD_TCP
|| c
->mode
== CM_CHILD_UDP
);
4595 /* init garbage collection level */
4598 /* inherit environmental variables */
4601 do_inherit_env(c
, env
);
4604 if (c
->mode
== CM_P2P
)
4606 init_management_callback_p2p(c
);
4609 /* possible sleep or management hold if restart */
4610 if (c
->mode
== CM_P2P
|| c
->mode
== CM_TOP
)
4612 do_startup_pause(c
);
4619 if (c
->options
.resolve_in_advance
)
4628 /* Resets all values to the initial values from the config where needed */
4629 pre_connect_restore(&c
->options
, &c
->c2
.gc
);
4631 /* map in current connection entry */
4632 next_connection_entry(c
);
4634 /* should we disable paging? */
4635 if (c
->first_time
&& options
->mlock
)
4637 platform_mlockall(true);
4640 /* get passwords if undefined */
4641 if (auth_retry_get() == AR_INTERACT
)
4643 init_query_passwords(c
);
4646 /* initialize context level 2 --verb/--mute parms */
4647 init_verb_mute(c
, IVM_LEVEL_2
);
4649 /* set error message delay for non-server modes */
4650 if (c
->mode
== CM_P2P
)
4652 set_check_status_error_delay(P2P_ERROR_DELAY_MS
);
4655 /* warn about inconsistent options */
4656 if (c
->mode
== CM_P2P
|| c
->mode
== CM_TOP
)
4658 do_option_warnings(c
);
4661 #ifdef ENABLE_PLUGIN
4662 /* initialize plugins */
4663 if (c
->mode
== CM_P2P
|| c
->mode
== CM_TOP
)
4665 open_plugins(c
, false, OPENVPN_PLUGIN_INIT_PRE_DAEMON
);
4669 /* should we enable fast I/O? */
4670 if (c
->mode
== CM_P2P
|| c
->mode
== CM_TOP
)
4672 do_setup_fast_io(c
);
4675 /* should we throw a signal on TLS errors? */
4676 do_signal_on_tls_errors(c
);
4678 /* open --status file */
4679 if (c
->mode
== CM_P2P
|| c
->mode
== CM_TOP
)
4681 do_open_status_output(c
);
4684 /* open --ifconfig-pool-persist file */
4685 if (c
->mode
== CM_TOP
)
4687 do_open_ifconfig_pool_persist(c
);
4690 /* reset OCC state */
4691 if (c
->mode
== CM_P2P
|| child
)
4693 c
->c2
.occ_op
= occ_reset_op();
4696 /* our wait-for-i/o objects, different for posix vs. win32 */
4697 if (c
->mode
== CM_P2P
|| c
->mode
== CM_TOP
)
4699 do_event_set_init(c
, SHAPER_DEFINED(&c
->options
));
4701 else if (c
->mode
== CM_CHILD_TCP
)
4703 do_event_set_init(c
, false);
4706 /* initialize HTTP or SOCKS proxy object at scope level 2 */
4709 /* allocate our socket object */
4710 if (c
->mode
== CM_P2P
|| c
->mode
== CM_TOP
|| c
->mode
== CM_CHILD_TCP
)
4712 do_link_socket_new(c
);
4715 #ifdef ENABLE_FRAGMENT
4716 /* initialize internal fragmentation object */
4717 if (options
->ce
.fragment
&& (c
->mode
== CM_P2P
|| child
))
4719 c
->c2
.fragment
= fragment_init(&c
->c2
.frame
);
4723 /* init crypto layer */
4725 unsigned int crypto_flags
= 0;
4726 if (c
->mode
== CM_TOP
)
4728 crypto_flags
= CF_INIT_TLS_AUTH_STANDALONE
;
4730 else if (c
->mode
== CM_P2P
)
4732 crypto_flags
= CF_LOAD_PERSISTED_PACKET_ID
| CF_INIT_TLS_MULTI
;
4736 crypto_flags
= CF_INIT_TLS_MULTI
;
4738 do_init_crypto(c
, crypto_flags
);
4739 if (IS_SIG(c
) && !child
)
4746 /* initialize compression library. */
4747 if (comp_enabled(&options
->comp
) && (c
->mode
== CM_P2P
|| child
))
4749 c
->c2
.comp_context
= comp_init(&options
->comp
);
4753 /* initialize MTU variables */
4756 /* initialize TLS MTU variables */
4757 do_init_frame_tls(c
);
4759 /* init workspace buffers whose size is derived from frame size */
4760 if (c
->mode
== CM_P2P
|| c
->mode
== CM_CHILD_TCP
)
4765 #ifdef ENABLE_FRAGMENT
4766 /* initialize internal fragmentation capability with known frame size */
4767 if (options
->ce
.fragment
&& (c
->mode
== CM_P2P
|| child
))
4769 do_init_fragment(c
);
4773 /* bind the TCP/UDP socket */
4774 if (c
->mode
== CM_P2P
|| c
->mode
== CM_TOP
|| c
->mode
== CM_CHILD_TCP
)
4776 do_init_socket_phase1(c
);
4779 /* initialize tun/tap device object,
4780 * open tun/tap device, ifconfig, run up script, etc. */
4781 if (!(options
->up_delay
|| PULL_DEFINED(options
)) && (c
->mode
== CM_P2P
|| c
->mode
== CM_TOP
))
4783 int error_flags
= 0;
4784 c
->c2
.did_open_tun
= do_open_tun(c
, &error_flags
);
4787 /* print MTU info */
4788 do_print_data_channel_mtu_parms(c
);
4790 /* get local and remote options compatibility strings */
4791 if (c
->mode
== CM_P2P
|| child
)
4793 do_compute_occ_strings(c
);
4796 /* initialize output speed limiter */
4797 if (c
->mode
== CM_P2P
)
4799 do_init_traffic_shaper(c
);
4802 /* do one-time inits, and possibly become a daemon here */
4803 do_init_first_time(c
);
4805 #ifdef ENABLE_PLUGIN
4806 /* initialize plugins */
4807 if (c
->mode
== CM_P2P
|| c
->mode
== CM_TOP
)
4809 open_plugins(c
, false, OPENVPN_PLUGIN_INIT_POST_DAEMON
);
4813 /* initialise connect timeout timer */
4814 do_init_server_poll_timeout(c
);
4816 /* finalize the TCP/UDP socket */
4817 if (c
->mode
== CM_P2P
|| c
->mode
== CM_TOP
|| c
->mode
== CM_CHILD_TCP
)
4819 do_init_socket_phase2(c
);
4822 /* Update dynamic frame calculation as exact transport socket information
4823 * (IP vs IPv6) may be only available after socket phase2 has finished.
4824 * This is only needed for --static or no crypto, NCP will recalculate this
4825 * in tls_session_update_crypto_params (P2MP) */
4826 for (int i
= 0; i
< c
->c1
.link_sockets_num
; i
++)
4828 frame_calculate_dynamic(&c
->c2
.frame
, &c
->c1
.ks
.key_type
, &c
->options
,
4829 &c
->c2
.link_sockets
[i
]->info
);
4834 * Actually do UID/GID downgrade, and chroot, if requested.
4835 * May be delayed by --client, --pull, or --up-delay.
4837 do_uid_gid_chroot(c
, c
->c2
.did_open_tun
);
4839 /* initialize timers */
4840 if (c
->mode
== CM_P2P
|| child
)
4842 do_init_timers(c
, false);
4845 #ifdef ENABLE_PLUGIN
4846 /* initialize plugins */
4847 if (c
->mode
== CM_P2P
|| c
->mode
== CM_TOP
)
4849 open_plugins(c
, false, OPENVPN_PLUGIN_INIT_POST_UID_CHANGE
);
4854 /* share OpenVPN port with foreign (such as HTTPS) server */
4855 if (c
->first_time
&& (c
->mode
== CM_P2P
|| c
->mode
== CM_TOP
))
4861 /* Check for signals */
4870 if (!c
->sig
->signal_text
)
4872 c
->sig
->signal_text
= "init_instance";
4874 close_context(c
, -1, flags
);
4879 * Close a tunnel instance.
4882 close_instance(struct context
*c
)
4884 /* close event objects */
4885 do_close_event_set(c
);
4887 if (c
->mode
== CM_P2P
4888 || c
->mode
== CM_CHILD_TCP
4889 || c
->mode
== CM_CHILD_UDP
4890 || c
->mode
== CM_TOP
)
4893 if (c
->c2
.comp_context
)
4895 comp_uninit(c
->c2
.comp_context
);
4896 c
->c2
.comp_context
= NULL
;
4901 do_close_free_buf(c
);
4903 /* close peer for DCO if enabled, needs peer-id so must be done before
4904 * closing TLS contexts */
4910 /* free key schedules */
4911 do_close_free_key_schedule(c
, (c
->mode
== CM_P2P
|| c
->mode
== CM_TOP
));
4913 /* close TCP/UDP connection */
4914 do_close_link_socket(c
);
4916 /* close TUN/TAP device */
4917 do_close_tun(c
, false);
4919 #ifdef ENABLE_MANAGEMENT
4922 management_notify_client_close(management
, &c
->c2
.mda_context
, NULL
);
4926 #ifdef ENABLE_PLUGIN
4927 /* call plugin close functions and unload */
4928 do_close_plugins(c
);
4931 /* close packet-id persistence file */
4932 do_close_packet_id(c
);
4934 /* close --status file */
4935 do_close_status_output(c
);
4937 #ifdef ENABLE_FRAGMENT
4938 /* close fragmentation handler */
4939 do_close_fragment(c
);
4942 /* close --ifconfig-pool-persist obj */
4943 do_close_ifconfig_pool_persist(c
);
4945 /* free up environmental variable store */
4946 do_env_set_destroy(c
);
4948 /* close HTTP or SOCKS proxy */
4951 /* garbage collect */
4957 inherit_context_child(struct context
*dest
,
4958 const struct context
*src
,
4959 struct link_socket
*sock
)
4963 /* proto_is_dgram will ASSERT(0) if proto is invalid */
4964 dest
->mode
= proto_is_dgram(sock
->info
.proto
) ? CM_CHILD_UDP
: CM_CHILD_TCP
;
4966 dest
->gc
= gc_new();
4968 ALLOC_OBJ_CLEAR_GC(dest
->sig
, struct signal_info
, &dest
->gc
);
4971 packet_id_persist_init(&dest
->c1
.pid_persist
);
4972 dest
->c1
.link_sockets_num
= 1;
4973 do_link_socket_addr_new(dest
);
4975 dest
->c1
.ks
.key_type
= src
->c1
.ks
.key_type
;
4976 /* inherit SSL context */
4977 dest
->c1
.ks
.ssl_ctx
= src
->c1
.ks
.ssl_ctx
;
4978 dest
->c1
.ks
.tls_wrap_key
= src
->c1
.ks
.tls_wrap_key
;
4979 dest
->c1
.ks
.tls_auth_key_type
= src
->c1
.ks
.tls_auth_key_type
;
4980 dest
->c1
.ks
.tls_crypt_v2_server_key
= src
->c1
.ks
.tls_crypt_v2_server_key
;
4981 /* inherit pre-NCP ciphers */
4982 dest
->options
.ciphername
= src
->options
.ciphername
;
4983 dest
->options
.authname
= src
->options
.authname
;
4985 /* inherit auth-token */
4986 dest
->c1
.ks
.auth_token_key
= src
->c1
.ks
.auth_token_key
;
4989 dest
->options
= src
->options
;
4990 dest
->options
.ce
.proto
= sock
->info
.proto
;
4991 options_detach(&dest
->options
);
4993 dest
->c2
.event_set
= src
->c2
.event_set
;
4995 if (dest
->mode
== CM_CHILD_TCP
)
4998 * The CM_TOP context does the socket listen(),
4999 * and the CM_CHILD_TCP context does the accept().
5001 dest
->c2
.accept_from
= sock
;
5004 #ifdef ENABLE_PLUGIN
5005 /* inherit plugins */
5006 do_inherit_plugins(dest
, src
);
5011 /* inherit tun/tap interface object now as it may be required
5012 * to initialize the DCO context in init_instance()
5014 dest
->c1
.tuntap
= src
->c1
.tuntap
;
5016 /* UDP inherits some extra things which TCP does not */
5017 if (dest
->mode
== CM_CHILD_UDP
)
5019 ASSERT(!dest
->c2
.link_sockets
);
5020 ASSERT(dest
->options
.ce
.local_list
);
5022 /* inherit buffers */
5023 dest
->c2
.buffers
= src
->c2
.buffers
;
5025 ALLOC_ARRAY_GC(dest
->c2
.link_sockets
, struct link_socket
*, 1, &dest
->gc
);
5027 /* inherit parent link_socket and tuntap */
5028 dest
->c2
.link_sockets
[0] = sock
;
5030 ALLOC_ARRAY_GC(dest
->c2
.link_socket_infos
, struct link_socket_info
*, 1, &dest
->gc
);
5031 ALLOC_OBJ_GC(dest
->c2
.link_socket_infos
[0], struct link_socket_info
, &dest
->gc
);
5032 *dest
->c2
.link_socket_infos
[0] = sock
->info
;
5034 /* locally override some link_socket_info fields */
5035 dest
->c2
.link_socket_infos
[0]->lsa
= &dest
->c1
.link_socket_addrs
[0];
5036 dest
->c2
.link_socket_infos
[0]->connection_established
= false;
5039 init_instance(dest
, src
->c2
.es
, CC_NO_CLOSE
| CC_USR1_TO_HUP
);
5047 inherit_context_top(struct context
*dest
,
5048 const struct context
*src
)
5054 * CM_TOP_CLONE will prevent close_instance from freeing or closing
5055 * resources owned by the parent.
5057 * Also note that CM_TOP_CLONE context objects are
5058 * closed by multi_top_free in multi.c.
5060 dest
->mode
= CM_TOP_CLONE
;
5062 dest
->first_time
= false;
5065 options_detach(&dest
->options
);
5066 gc_detach(&dest
->gc
);
5067 gc_detach(&dest
->c2
.gc
);
5069 /* detach plugins */
5070 dest
->plugins_owned
= false;
5072 dest
->c2
.tls_multi
= NULL
;
5074 /* detach c1 ownership */
5075 dest
->c1
.tuntap_owned
= false;
5076 dest
->c1
.status_output_owned
= false;
5077 dest
->c1
.ifconfig_pool_persist_owned
= false;
5079 /* detach c2 ownership */
5080 dest
->c2
.event_set_owned
= false;
5081 dest
->c2
.link_socket_owned
= false;
5082 dest
->c2
.buffers_owned
= false;
5083 dest
->c2
.es_owned
= false;
5085 dest
->c2
.event_set
= NULL
;
5086 do_event_set_init(dest
, false);
5089 dest
->c2
.comp_context
= NULL
;
5094 close_context(struct context
*c
, int sig
, unsigned int flags
)
5101 register_signal(c
->sig
, sig
, "close_context");
5104 if (c
->sig
->signal_received
== SIGUSR1
)
5106 if ((flags
& CC_USR1_TO_HUP
)
5107 || (c
->sig
->source
== SIG_SOURCE_HARD
&& (flags
& CC_HARD_USR1_TO_HUP
)))
5109 register_signal(c
->sig
, SIGHUP
, "close_context usr1 to hup");
5113 if (!(flags
& CC_NO_CLOSE
))
5118 if (flags
& CC_GC_FREE
)
5124 /* Write our PID to a file */
5126 write_pid_file(const char *filename
, const char *chroot_dir
)
5130 unsigned int pid
= 0;
5131 FILE *fp
= platform_fopen(filename
, "w");
5134 msg(M_ERR
, "Open error on pid file %s", filename
);
5138 pid
= platform_getpid();
5139 fprintf(fp
, "%u\n", pid
);
5142 msg(M_ERR
, "Close error on pid file %s", filename
);
5145 /* remember file name so it can be deleted "out of context" later */
5146 /* (the chroot case is more complex and not handled today) */
5149 saved_pid_file_name
= strdup(filename
);
5150 if (!saved_pid_file_name
)
5152 msg(M_FATAL
, "Failed allocate memory saved_pid_file_name");
5158 /* remove PID file on exit, called from openvpn_exit() */
5160 remove_pid_file(void)
5162 if (saved_pid_file_name
)
5164 platform_unlink(saved_pid_file_name
);
5170 * Do a loopback test
5171 * on the crypto subsystem.
5174 test_crypto_thread(void *arg
)
5176 struct context
*c
= (struct context
*) arg
;
5177 const struct options
*options
= &c
->options
;
5179 ASSERT(options
->test_crypto
);
5180 init_verb_mute(c
, IVM_LEVEL_1
);
5182 next_connection_entry(c
);
5183 do_init_crypto_static(c
, 0);
5185 frame_finalize_options(c
, options
);
5187 test_crypto(&c
->c2
.crypto_options
, &c
->c2
.frame
);
5189 key_schedule_free(&c
->c1
.ks
, true);
5190 packet_id_free(&c
->c2
.crypto_options
.packet_id
);
5197 do_test_crypto(const struct options
*o
)
5203 /* print version number */
5204 msg(M_INFO
, "%s", title_string
);
5208 options_detach(&c
.options
);
5209 c
.first_time
= true;
5210 test_crypto_thread((void *) &c
);