Improve OpenVPN & OpenConnect interoperability
This commit is contained in:
+64
-27
@@ -4,36 +4,63 @@ import "github.com/sagernet/sing/common/json/badoption"
|
||||
|
||||
type OpenConnectEndpointOptions struct {
|
||||
DialerOptions
|
||||
System bool `json:"system,omitempty"`
|
||||
Name string `json:"name,omitempty"`
|
||||
UDPTimeout badoption.Duration `json:"udp_timeout,omitempty"`
|
||||
UDPMapping UDPNATBehavior `json:"udp_mapping,omitempty"`
|
||||
UDPFiltering UDPNATBehavior `json:"udp_filtering,omitempty"`
|
||||
UDPNATMax uint32 `json:"udp_nat_max,omitempty"`
|
||||
Server string `json:"server"`
|
||||
Flavor string `json:"flavor,omitempty"`
|
||||
Username string `json:"username,omitempty"`
|
||||
Password string `json:"password,omitempty"`
|
||||
AuthGroup string `json:"auth_group,omitempty"`
|
||||
Token *OpenConnectTokenOptions `json:"token,omitempty"`
|
||||
ReportedOS string `json:"reported_os,omitempty"`
|
||||
UserAgent string `json:"user_agent,omitempty"`
|
||||
CSD *OpenConnectCSDOptions `json:"csd,omitempty"`
|
||||
HIP *OpenConnectHIPOptions `json:"hip,omitempty"`
|
||||
TNCC *OpenConnectTNCCOptions `json:"tncc,omitempty"`
|
||||
NoUDP bool `json:"no_udp,omitempty"`
|
||||
AllowInsecureCrypto bool `json:"allow_insecure_crypto,omitempty"`
|
||||
TLS OpenConnectTLSOptions `json:"tls,omitempty"`
|
||||
FormEntries []OpenConnectFormEntryOptions `json:"form_entries,omitempty"`
|
||||
System bool `json:"system,omitempty"`
|
||||
Name string `json:"name,omitempty"`
|
||||
UDPTimeout badoption.Duration `json:"udp_timeout,omitempty"`
|
||||
UDPMapping UDPNATBehavior `json:"udp_mapping,omitempty"`
|
||||
UDPFiltering UDPNATBehavior `json:"udp_filtering,omitempty"`
|
||||
UDPNATMax uint32 `json:"udp_nat_max,omitempty"`
|
||||
Server string `json:"server"`
|
||||
Flavor string `json:"flavor,omitempty"`
|
||||
Username string `json:"username,omitempty"`
|
||||
Password string `json:"password,omitempty"`
|
||||
AuthGroup string `json:"auth_group,omitempty"`
|
||||
Cookie string `json:"cookie,omitempty"`
|
||||
Token *OpenConnectTokenOptions `json:"token,omitempty"`
|
||||
ReportedOS string `json:"reported_os,omitempty"`
|
||||
UserAgent string `json:"user_agent,omitempty"`
|
||||
Version string `json:"version,omitempty"`
|
||||
LocalHostname string `json:"local_hostname,omitempty"`
|
||||
Mobile *OpenConnectMobileOptions `json:"mobile,omitempty"`
|
||||
CSD *OpenConnectCSDOptions `json:"csd,omitempty"`
|
||||
HIP *OpenConnectHIPOptions `json:"hip,omitempty"`
|
||||
TNCC *OpenConnectTNCCOptions `json:"tncc,omitempty"`
|
||||
NoUDP bool `json:"no_udp,omitempty"`
|
||||
DTLSLocalPort uint16 `json:"dtls_local_port,omitempty"`
|
||||
CompressionDisabled bool `json:"compression_disabled,omitempty"`
|
||||
CompressionMode string `json:"compression_mode,omitempty"`
|
||||
IPv6Disabled bool `json:"ipv6_disabled,omitempty"`
|
||||
HTTPKeepAliveDisabled bool `json:"http_keepalive_disabled,omitempty"`
|
||||
XMLPostDisabled bool `json:"xml_post_disabled,omitempty"`
|
||||
ExternalAuthDisabled bool `json:"external_auth_disabled,omitempty"`
|
||||
PasswordAuthenticationDisabled bool `json:"password_authentication_disabled,omitempty"`
|
||||
TCPKeepAliveEnabled bool `json:"tcp_keep_alive_enabled,omitempty"`
|
||||
PFS bool `json:"pfs,omitempty"`
|
||||
MTU uint32 `json:"mtu,omitempty"`
|
||||
BaseMTU uint32 `json:"base_mtu,omitempty"`
|
||||
DPDInterval badoption.Duration `json:"dpd_interval,omitempty"`
|
||||
ReconnectTimeout badoption.Duration `json:"reconnect_timeout,omitempty"`
|
||||
TrojanInterval badoption.Duration `json:"trojan_interval,omitempty"`
|
||||
QueueLength uint32 `json:"queue_length,omitempty"`
|
||||
AllowInsecureCrypto bool `json:"allow_insecure_crypto,omitempty"`
|
||||
TLS OpenConnectTLSOptions `json:"tls,omitempty"`
|
||||
FormEntries []OpenConnectFormEntryOptions `json:"form_entries,omitempty"`
|
||||
}
|
||||
|
||||
type OpenConnectTokenOptions struct {
|
||||
Mode string `json:"mode,omitempty"`
|
||||
Secret string `json:"secret,omitempty"`
|
||||
PIN string `json:"pin,omitempty"`
|
||||
Password string `json:"password,omitempty"`
|
||||
DeviceID string `json:"device_id,omitempty"`
|
||||
Counter uint64 `json:"counter,omitempty"`
|
||||
Mode string `json:"mode,omitempty"`
|
||||
Secret string `json:"secret,omitempty"`
|
||||
SecretPath string `json:"secret_path,omitempty"`
|
||||
PIN string `json:"pin,omitempty"`
|
||||
Password string `json:"password,omitempty"`
|
||||
DeviceID string `json:"device_id,omitempty"`
|
||||
Counter uint64 `json:"counter,omitempty"`
|
||||
}
|
||||
|
||||
type OpenConnectMobileOptions struct {
|
||||
PlatformVersion string `json:"platform_version"`
|
||||
DeviceType string `json:"device_type"`
|
||||
DeviceUniqueID string `json:"device_unique_id"`
|
||||
}
|
||||
|
||||
type OpenConnectCSDOptions struct {
|
||||
@@ -58,6 +85,10 @@ type OpenConnectTNCCCertificateOptions struct {
|
||||
}
|
||||
|
||||
type OpenConnectTLSOptions struct {
|
||||
Insecure bool `json:"insecure,omitempty"`
|
||||
ServerName string `json:"server_name,omitempty"`
|
||||
PeerFingerprint badoption.Listable[string] `json:"peer_fingerprint,omitempty"`
|
||||
SystemTrustDisabled bool `json:"system_trust_disabled,omitempty"`
|
||||
CertificateAuthority badoption.Listable[string] `json:"certificate_authority,omitempty"`
|
||||
CertificateAuthorityPath string `json:"certificate_authority_path,omitempty"`
|
||||
ClientCertificate badoption.Listable[string] `json:"client_certificate,omitempty"`
|
||||
@@ -79,3 +110,9 @@ type OpenConnectFormEntryOptions struct {
|
||||
Value string `json:"value,omitempty"`
|
||||
Promote bool `json:"promote,omitempty"`
|
||||
}
|
||||
|
||||
type OpenConnectDNSServerOptions struct {
|
||||
Endpoint string `json:"endpoint,omitempty"`
|
||||
AcceptDefaultResolvers bool `json:"accept_default_resolvers,omitempty"`
|
||||
AcceptSearchDomain bool `json:"accept_search_domain,omitempty"`
|
||||
}
|
||||
|
||||
@@ -20,20 +20,33 @@ type OpenVPNClientEndpointOptions struct {
|
||||
DialerOptions
|
||||
ServerOptions
|
||||
OpenVPNEndpointOptions
|
||||
Mode string `json:"mode,omitempty"`
|
||||
Network string `json:"network,omitempty"`
|
||||
Servers []OpenVPNRemoteOptions `json:"servers,omitempty"`
|
||||
RemoteRandom bool `json:"remote_random,omitempty"`
|
||||
Address badoption.Listable[netip.Prefix] `json:"address,omitempty"`
|
||||
PeerAddress badoption.Addr `json:"peer_address,omitempty"`
|
||||
PeerAddressIPv6 badoption.Addr `json:"peer_address_ipv6,omitempty"`
|
||||
Topology string `json:"topology,omitempty"`
|
||||
Username string `json:"username,omitempty"`
|
||||
Password string `json:"password,omitempty"`
|
||||
AuthRetry string `json:"auth_retry,omitempty"`
|
||||
StaticChallenge string `json:"static_challenge,omitempty"`
|
||||
StaticChallengeEcho bool `json:"static_challenge_echo,omitempty"`
|
||||
StaticKey badoption.Listable[string] `json:"static_key,omitempty"`
|
||||
StaticKeyPath string `json:"static_key_path,omitempty"`
|
||||
KeyDirection string `json:"key_direction,omitempty"`
|
||||
TLS *OpenVPNOutboundTLSOptions `json:"tls,omitempty"`
|
||||
Cipher string `json:"cipher,omitempty"`
|
||||
DataCiphers badoption.Listable[string] `json:"data_ciphers,omitempty"`
|
||||
DataCiphersFallback string `json:"data_ciphers_fallback,omitempty"`
|
||||
Auth string `json:"auth,omitempty"`
|
||||
MSSFix uint32 `json:"mss_fix,omitempty"`
|
||||
MSSFixDisabled bool `json:"mss_fix_disabled,omitempty"`
|
||||
MSSFixMode string `json:"mss_fix_mode,omitempty"`
|
||||
Fragment uint32 `json:"fragment,omitempty"`
|
||||
ReplayWindow uint32 `json:"replay_window,omitempty"`
|
||||
ReplayWindowTime badoption.Duration `json:"replay_window_time,omitempty"`
|
||||
Compression string `json:"compression,omitempty"`
|
||||
CompressionLZO string `json:"compression_lzo,omitempty"`
|
||||
AllowCompression string `json:"allow_compression,omitempty"`
|
||||
@@ -44,9 +57,17 @@ type OpenVPNClientEndpointOptions struct {
|
||||
RouteMetric int `json:"route_metric,omitempty"`
|
||||
RedirectGateway bool `json:"redirect_gateway,omitempty"`
|
||||
RedirectGatewayFlags badoption.Listable[string] `json:"redirect_gateway_flags,omitempty"`
|
||||
RedirectPrivate bool `json:"redirect_private,omitempty"`
|
||||
BlockIPv6 bool `json:"block_ipv6,omitempty"`
|
||||
PingInterval badoption.Duration `json:"ping_interval,omitempty"`
|
||||
PingRestart badoption.Duration `json:"ping_restart,omitempty"`
|
||||
PingRestartDisabled bool `json:"ping_restart_disabled,omitempty"`
|
||||
RenegotiateInterval badoption.Duration `json:"renegotiate_interval,omitempty"`
|
||||
RenegotiateDisabled bool `json:"renegotiate_disabled,omitempty"`
|
||||
RenegotiateBytes uint64 `json:"renegotiate_bytes,omitempty"`
|
||||
RenegotiatePackets uint64 `json:"renegotiate_packets,omitempty"`
|
||||
TLSTimeout badoption.Duration `json:"tls_timeout,omitempty"`
|
||||
HandshakeWindow badoption.Duration `json:"handshake_window,omitempty"`
|
||||
ExplicitExitNotify uint32 `json:"explicit_exit_notify,omitempty"`
|
||||
UDPTimeout UDPTimeoutCompat `json:"udp_timeout,omitempty"`
|
||||
}
|
||||
@@ -54,20 +75,37 @@ type OpenVPNClientEndpointOptions struct {
|
||||
type OpenVPNServerEndpointOptions struct {
|
||||
ListenOptions
|
||||
OpenVPNEndpointOptions
|
||||
Mode string `json:"mode,omitempty"`
|
||||
Network string `json:"network,omitempty"`
|
||||
Remote string `json:"remote,omitempty"`
|
||||
RemotePort uint16 `json:"remote_port,omitempty"`
|
||||
MaxClients int `json:"max_clients,omitempty"`
|
||||
Address badoption.Listable[netip.Prefix] `json:"address"`
|
||||
PeerAddress badoption.Addr `json:"peer_address,omitempty"`
|
||||
PeerAddressIPv6 badoption.Addr `json:"peer_address_ipv6,omitempty"`
|
||||
Topology string `json:"topology,omitempty"`
|
||||
DuplicateCN bool `json:"duplicate_cn,omitempty"`
|
||||
Users []auth.User `json:"users,omitempty"`
|
||||
StaticKey badoption.Listable[string] `json:"static_key,omitempty"`
|
||||
StaticKeyPath string `json:"static_key_path,omitempty"`
|
||||
KeyDirection string `json:"key_direction,omitempty"`
|
||||
TLS *OpenVPNInboundTLSOptions `json:"tls,omitempty"`
|
||||
Cipher string `json:"cipher,omitempty"`
|
||||
DataCiphers badoption.Listable[string] `json:"data_ciphers,omitempty"`
|
||||
DataCiphersFallback string `json:"data_ciphers_fallback,omitempty"`
|
||||
Auth string `json:"auth,omitempty"`
|
||||
MSSFix uint32 `json:"mss_fix,omitempty"`
|
||||
MSSFixDisabled bool `json:"mss_fix_disabled,omitempty"`
|
||||
MSSFixMode string `json:"mss_fix_mode,omitempty"`
|
||||
ReplayWindow uint32 `json:"replay_window,omitempty"`
|
||||
ReplayWindowTime badoption.Duration `json:"replay_window_time,omitempty"`
|
||||
Push *OpenVPNPushOptions `json:"push,omitempty"`
|
||||
PingInterval badoption.Duration `json:"ping_interval,omitempty"`
|
||||
PingRestart badoption.Duration `json:"ping_restart,omitempty"`
|
||||
RenegotiateInterval badoption.Duration `json:"renegotiate_interval,omitempty"`
|
||||
RenegotiateDisabled bool `json:"renegotiate_disabled,omitempty"`
|
||||
RenegotiateBytes uint64 `json:"renegotiate_bytes,omitempty"`
|
||||
RenegotiatePackets uint64 `json:"renegotiate_packets,omitempty"`
|
||||
HandshakeWindow badoption.Duration `json:"handshake_window,omitempty"`
|
||||
}
|
||||
|
||||
@@ -96,6 +134,7 @@ type OpenVPNOutboundTLSOptions struct {
|
||||
RemoteCertificateEKU string `json:"remote_certificate_eku,omitempty"`
|
||||
RemoteCertificateTLS string `json:"remote_certificate_tls,omitempty"`
|
||||
CertificateProfile string `json:"certificate_profile,omitempty"`
|
||||
NSCertificateType string `json:"ns_certificate_type,omitempty"`
|
||||
VersionMin string `json:"version_min,omitempty"`
|
||||
VersionMax string `json:"version_max,omitempty"`
|
||||
Cipher string `json:"cipher,omitempty"`
|
||||
@@ -111,7 +150,19 @@ type OpenVPNInboundTLSOptions struct {
|
||||
ClientCertificate badoption.Listable[string] `json:"client_certificate,omitempty"`
|
||||
ClientCertificatePath string `json:"client_certificate_path,omitempty"`
|
||||
VerifyClientCertificate string `json:"verify_client_certificate,omitempty"`
|
||||
ClientName string `json:"client_name,omitempty"`
|
||||
ClientNameType string `json:"client_name_type,omitempty"`
|
||||
PeerFingerprint badoption.Listable[string] `json:"peer_fingerprint,omitempty"`
|
||||
CRLPath string `json:"crl_path,omitempty"`
|
||||
RemoteCertificateKU badoption.Listable[string] `json:"remote_certificate_ku,omitempty"`
|
||||
RemoteCertificateEKU string `json:"remote_certificate_eku,omitempty"`
|
||||
RemoteCertificateTLS string `json:"remote_certificate_tls,omitempty"`
|
||||
CertificateProfile string `json:"certificate_profile,omitempty"`
|
||||
NSCertificateType string `json:"ns_certificate_type,omitempty"`
|
||||
VersionMin string `json:"version_min,omitempty"`
|
||||
VersionMax string `json:"version_max,omitempty"`
|
||||
Cipher string `json:"cipher,omitempty"`
|
||||
Groups string `json:"groups,omitempty"`
|
||||
ControlWrap *OpenVPNInboundControlWrapOptions `json:"control_wrap,omitempty"`
|
||||
}
|
||||
|
||||
@@ -133,9 +184,27 @@ type OpenVPNInboundControlWrapOptions struct {
|
||||
type OpenVPNPushOptions struct {
|
||||
Routes badoption.Listable[netip.Prefix] `json:"routes,omitempty"`
|
||||
DNS badoption.Listable[netip.Addr] `json:"dns,omitempty"`
|
||||
DNSServers []OpenVPNPushDNSServerOptions `json:"dns_servers,omitempty"`
|
||||
SearchDomains badoption.Listable[string] `json:"search_domains,omitempty"`
|
||||
DHCPOptions badoption.Listable[string] `json:"dhcp_options,omitempty"`
|
||||
RedirectGateway bool `json:"redirect_gateway,omitempty"`
|
||||
RedirectGatewayFlags badoption.Listable[string] `json:"redirect_gateway_flags,omitempty"`
|
||||
BlockOutsideDNS bool `json:"block_outside_dns,omitempty"`
|
||||
PingInterval badoption.Duration `json:"ping_interval,omitempty"`
|
||||
PingRestart badoption.Duration `json:"ping_restart,omitempty"`
|
||||
}
|
||||
|
||||
type OpenVPNPushDNSServerOptions struct {
|
||||
Priority int `json:"priority"`
|
||||
Addresses badoption.Listable[string] `json:"addresses"`
|
||||
ResolveDomains badoption.Listable[string] `json:"resolve_domains,omitempty"`
|
||||
DNSSEC string `json:"dnssec,omitempty"`
|
||||
Transport string `json:"transport,omitempty"`
|
||||
SNI string `json:"sni,omitempty"`
|
||||
}
|
||||
|
||||
type OpenVPNDNSServerOptions struct {
|
||||
Endpoint string `json:"endpoint,omitempty"`
|
||||
AcceptDefaultResolvers bool `json:"accept_default_resolvers,omitempty"`
|
||||
AcceptSearchDomain bool `json:"accept_search_domain,omitempty"`
|
||||
}
|
||||
|
||||
+24
-22
@@ -65,28 +65,30 @@ type DialerOptionsWrapper interface {
|
||||
}
|
||||
|
||||
type DialerOptions struct {
|
||||
Detour string `json:"detour,omitempty"`
|
||||
BindInterface string `json:"bind_interface,omitempty"`
|
||||
Inet4BindAddress *badoption.Addr `json:"inet4_bind_address,omitempty"`
|
||||
Inet6BindAddress *badoption.Addr `json:"inet6_bind_address,omitempty"`
|
||||
BindAddressNoPort bool `json:"bind_address_no_port,omitempty"`
|
||||
ProtectPath string `json:"protect_path,omitempty"`
|
||||
RoutingMark FwMark `json:"routing_mark,omitempty"`
|
||||
ReuseAddr bool `json:"reuse_addr,omitempty"`
|
||||
NetNs string `json:"netns,omitempty"`
|
||||
ConnectTimeout badoption.Duration `json:"connect_timeout,omitempty"`
|
||||
TCPFastOpen bool `json:"tcp_fast_open,omitempty"`
|
||||
TCPMultiPath bool `json:"tcp_multi_path,omitempty"`
|
||||
DisableTCPKeepAlive bool `json:"disable_tcp_keep_alive,omitempty"`
|
||||
TCPKeepAlive badoption.Duration `json:"tcp_keep_alive,omitempty"`
|
||||
TCPKeepAliveInterval badoption.Duration `json:"tcp_keep_alive_interval,omitempty"`
|
||||
UDPFragment *bool `json:"udp_fragment,omitempty"`
|
||||
UDPFragmentDefault bool `json:"-"`
|
||||
DomainResolver *DomainResolveOptions `json:"domain_resolver,omitempty"`
|
||||
NetworkStrategy *NetworkStrategy `json:"network_strategy,omitempty"`
|
||||
NetworkType badoption.Listable[InterfaceType] `json:"network_type,omitempty"`
|
||||
FallbackNetworkType badoption.Listable[InterfaceType] `json:"fallback_network_type,omitempty"`
|
||||
FallbackDelay badoption.Duration `json:"fallback_delay,omitempty"`
|
||||
Detour string `json:"detour,omitempty"`
|
||||
BindInterface string `json:"bind_interface,omitempty"`
|
||||
Inet4BindAddress *badoption.Addr `json:"inet4_bind_address,omitempty"`
|
||||
Inet6BindAddress *badoption.Addr `json:"inet6_bind_address,omitempty"`
|
||||
BindAddressNoPort bool `json:"bind_address_no_port,omitempty"`
|
||||
ProtectPath string `json:"protect_path,omitempty"`
|
||||
RoutingMark FwMark `json:"routing_mark,omitempty"`
|
||||
ReuseAddr bool `json:"reuse_addr,omitempty"`
|
||||
NetNs string `json:"netns,omitempty"`
|
||||
ConnectTimeout badoption.Duration `json:"connect_timeout,omitempty"`
|
||||
TCPFastOpen bool `json:"tcp_fast_open,omitempty"`
|
||||
TCPMultiPath bool `json:"tcp_multi_path,omitempty"`
|
||||
DisableTCPKeepAlive bool `json:"disable_tcp_keep_alive,omitempty"`
|
||||
TCPKeepAlive badoption.Duration `json:"tcp_keep_alive,omitempty"`
|
||||
TCPKeepAliveInterval badoption.Duration `json:"tcp_keep_alive_interval,omitempty"`
|
||||
TCPKeepAliveSystemDefaults bool `json:"-"`
|
||||
UDPBindPort uint16 `json:"-"`
|
||||
UDPFragment *bool `json:"udp_fragment,omitempty"`
|
||||
UDPFragmentDefault bool `json:"-"`
|
||||
DomainResolver *DomainResolveOptions `json:"domain_resolver,omitempty"`
|
||||
NetworkStrategy *NetworkStrategy `json:"network_strategy,omitempty"`
|
||||
NetworkType badoption.Listable[InterfaceType] `json:"network_type,omitempty"`
|
||||
FallbackNetworkType badoption.Listable[InterfaceType] `json:"fallback_network_type,omitempty"`
|
||||
FallbackDelay badoption.Duration `json:"fallback_delay,omitempty"`
|
||||
|
||||
// Deprecated: migrated to domain resolver
|
||||
DomainStrategy DomainStrategy `json:"domain_strategy,omitempty"`
|
||||
|
||||
Reference in New Issue
Block a user