Documentation
¶
Overview ¶
Package veepin is a from-scratch userspace VPN implemented in pure Go, with golang.org/x/crypto its only dependency (WireGuard mandates ChaCha20-Poly1305 and BLAKE2s, which the standard library does not ship).
It speaks sixteen production protocols, as both an initiator and a responder for every one: IKEv2/ESP, WireGuard, OpenVPN, SSTP, SSH, L2TP/IPsec, L2TPv3 Ethernet pseudowire, AnyConnect, Nebula, MASQUE, Fortinet, GlobalProtect, Cisco IPsec, Ivanti Connect Secure, SoftEther VPN (SE-VPN) and AmneziaWG. Each is verified in Docker against a real third-party implementation, and against itself.
The tree is arranged so a further protocol is a sibling rather than a rewrite:
- cmd/veepin — the command: connect, serve and probe subcommands.
- client — the protocol registry, and the Session/Result/Server contracts every protocol produces.
- dataplane — TUN device, address pool, packet pump and client routing; protocol-agnostic.
- internal/cryptoutil — the cryptographic primitives; protocol-agnostic.
The public package for each protocol is its supported surface (Dial and NewServer, plus a typed Config); the implementation lives under internal:
ikev2, internal/ikev2/... — IKEv2 with a userspace ESP data path.
wireguard, internal/wireguard/... — Noise_IKpsk2 and the transport crypto.
openvpn, internal/openvpn/... — the TLS control channel and P_DATA_V2.
sstp, internal/sstp/... — SSTP over TLS, with PPP.
ssh, internal/sshtun — tun@openssh.com channels.
l2tp, internal/l2tp, internal/ikev1 — L2TP over an IKEv1-keyed ESP SA.
anyconnect, internal/anyconnect, internal/dtls — CSTP over TLS, with a from-scratch DTLS 1.2 PSK data channel.
nebula, internal/nebula — a mesh overlay: Noise IX, CA-issued host certificates, and lighthouse discovery.
masque, internal/masque — IP (CONNECT-IP) and UDP (CONNECT-UDP) over HTTP/3, on a from-scratch HTTP/3 layer over golang.org/x/net/quic.
fortinet, internal/fortinet — the FortiOS SSL VPN: PPP over TLS, with a certificate-based DTLS 1.2 channel alongside it.
gp, internal/gp — the Palo Alto GlobalProtect SSL VPN: an HTTPS exchange that hands out ESP keys directly, then RFC 4303 ESP over UDP, with a framed layer-3 tunnel over TLS as the fallback.
cisco, internal/cisco, internal/ikev1 — Cisco-style IPsec remote access: IKEv1 Aggressive Mode with a group key, XAuth, Mode-Config, and a tunnel-mode ESP SA.
pulse, internal/pulse — Ivanti Connect Secure: IF-T/TLS framing with EAP inside it, and either RFC 4303 ESP over UDP or that same connection for data.
softether, internal/softether — SoftEther VPN native protocol: Ethernet frames over TLS, using the PACK key/value serialisation for control and raw Ethernet on a TAP device for data.
amneziawg — DPI-resistant WireGuard fork: the same Noise IK handshake and ChaCha20-Poly1305 transport, with configurable message-type constants and random padding to defeat packet-signature classification.
l2tpv3, internal/l2tpv3 — L2TPv3 Ethernet pseudowire (RFC 3931 + 4719): layer-2 Ethernet frames over UDP, with a static session and optional cookie and sublayer. Uses a TAP device instead of TUN.
Two packages are shared by the PPP-carrying protocols: internal/ppp (LCP, MS-CHAPv2, IPCP, both roles) and internal/mschap.
The supervisor and management plane ¶
internal/supervisor runs multiple client.Server instances in one process: one JSON file per listener under a config directory, one goroutine per Listener. Single-protocol `veepin serve <proto>` builds one Server and blocks on it; `veepin serve -config <dir>` builds the fleet, opens a management plane, and cold-rebuilds one listener on edit without disturbing the rest.
internal/hostnet owns the host-side setup those two paths share: assigning the TUN interface address, enabling forwarding, and installing the NAT / FORWARD iptables rules tagged `veepin:<name>`. The supervisor is the only veepin subsystem that mutates host state on rebuild.
internal/mgmt and internal/mgmt/ui are the management API and the server-rendered html/template panel that drives it. Both endpoints live on a localhost-bound HTTP listener, authenticated by a 32-byte bearer token generated on first run and stored 0600 root-only. doc/security.md states the threat model of binding the panel off localhost.
The example protocol ¶
toy and internal/toy implement TOY, which is NOT one of the nineteen above and PROVIDES NO SECURITY. It is a worked example of how a protocol is assembled here — a handshake producing a client.Result, a dataplane.Pump data path, both roles registered — with the cryptography replaced by deliberately worthless placeholders. internal/toy/SPEC.md documents the wire format and enumerates how and why it fails. Read it to learn the structure; never to carry traffic.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package amneziawg implements the AmneziaWG protocol, a DPI-resistant fork of WireGuard that applies obfuscation to defeat packet-signature classification.
|
Package amneziawg implements the AmneziaWG protocol, a DPI-resistant fork of WireGuard that applies obfuscation to defeat packet-signature classification. |
|
Package anyconnect is the public entry point for the Cisco AnyConnect SSL VPN protocol — the wire protocol OpenConnect and ocserv speak, specified as draft-mavrogiannopoulos-openconnect.
|
Package anyconnect is the public entry point for the Cisco AnyConnect SSL VPN protocol — the wire protocol OpenConnect and ocserv speak, specified as draft-mavrogiannopoulos-openconnect. |
|
Package cisco is the public entry point to Cisco-style IPsec remote access: IKEv1 Aggressive Mode with a group pre-shared key, XAuth for the per-user credentials, Mode-Config for the address assignment, and a tunnel-mode ESP SA carrying bare IP over UDP.
|
Package cisco is the public entry point to Cisco-style IPsec remote access: IKEv1 Aggressive Mode with a group pre-shared key, XAuth for the per-user credentials, Mode-Config for the address assignment, and a tunnel-mode ESP SA carrying bare IP over UDP. |
|
Package client is the protocol-agnostic entry point for bringing up a VPN tunnel.
|
Package client is the protocol-agnostic entry point for bringing up a VPN tunnel. |
|
cmd
|
|
|
livingreadme
command
Command livingreadme regenerates one machine-managed region of the project README from a CI job's results and writes it back in place.
|
Command livingreadme regenerates one machine-managed region of the project README from a CI job's results and writes it back in place. |
|
veepin
command
Command veepin is a userspace VPN client and server.
|
Command veepin is a userspace VPN client and server. |
|
Package dataplane implements the userspace VPN data path: a TUN device plus the ESP encapsulation pump that moves IP packets between the tunnel and the network.
|
Package dataplane implements the userspace VPN data path: a TUN device plus the ESP encapsulation pump that moves IP packets between the tunnel and the network. |
|
Package fortinet is the public entry point to the Fortinet FortiOS SSL VPN: an HTTPS login and config exchange, then a PPP-over-TLS data tunnel.
|
Package fortinet is the public entry point to the Fortinet FortiOS SSL VPN: an HTTPS login and config exchange, then a PPP-over-TLS data tunnel. |
|
Package gp is the public entry point to the Palo Alto Networks GlobalProtect SSL VPN: an HTTPS login and configuration exchange, then either an ESP data path or a framed layer-3 tunnel over TLS.
|
Package gp is the public entry point to the Palo Alto Networks GlobalProtect SSL VPN: an HTTPS login and configuration exchange, then either an ESP data path or a framed layer-3 tunnel over TLS. |
|
Package ikev2 is the public entry point to this module's IKEv2 implementation: a client that performs the handshake (PSK or EAP-MSCHAPv2) and runs a userspace ESP-in-UDP data path over a TUN device.
|
Package ikev2 is the public entry point to this module's IKEv2 implementation: a client that performs the handshake (PSK or EAP-MSCHAPv2) and runs a userspace ESP-in-UDP data path over a TUN device. |
|
internal
|
|
|
anyconnect
Package anyconnect implements the Cisco AnyConnect SSL VPN protocol — the wire protocol OpenConnect and ocserv speak, written down as draft-mavrogiannopoulos-openconnect.
|
Package anyconnect implements the Cisco AnyConnect SSL VPN protocol — the wire protocol OpenConnect and ocserv speak, written down as draft-mavrogiannopoulos-openconnect. |
|
cisco
Package cisco implements Cisco-style IPsec remote access: IKEv1 Aggressive Mode with a group pre-shared key, XAuth for the per-user credentials, Mode-Config for the address assignment, and a tunnel-mode ESP SA carrying bare IP over UDP.
|
Package cisco implements Cisco-style IPsec remote access: IKEv1 Aggressive Mode with a group pre-shared key, XAuth for the per-user credentials, Mode-Config for the address assignment, and a tunnel-mode ESP SA carrying bare IP over UDP. |
|
confstore
Package confstore is the one-JSON-file-per-entity directory that both the supervisor's listener set and the client's saved profiles are.
|
Package confstore is the one-JSON-file-per-entity directory that both the supervisor's listener set and the client's saved profiles are. |
|
cryptoutil
Package cryptoutil implements the cryptographic primitives a VPN transport needs: Diffie-Hellman groups, keyed PRFs and prf+ expansion, integrity transforms, and the handshake (SKCipher) and data-path (ESPCrypter) ciphers.
|
Package cryptoutil implements the cryptographic primitives a VPN transport needs: Diffie-Hellman groups, keyed PRFs and prf+ expansion, integrity transforms, and the handshake (SKCipher) and data-path (ESPCrypter) ciphers. |
|
debuglog
Package debuglog is the single switch for protocol-level verbose output.
|
Package debuglog is the single switch for protocol-level verbose output. |
|
dtls
Package dtls implements the subset of DTLS 1.2 (RFC 6347) that the AnyConnect data channel needs: a pre-shared-key handshake with AES-GCM, in both the client and server roles.
|
Package dtls implements the subset of DTLS 1.2 (RFC 6347) that the AnyConnect data channel needs: a pre-shared-key handshake with AES-GCM, in both the client and server roles. |
|
fortinet
Package fortinet implements the FortiOS SSL VPN protocol: the HTTPS authentication and configuration exchange, and the PPP-over-TLS data tunnel.
|
Package fortinet implements the FortiOS SSL VPN protocol: the HTTPS authentication and configuration exchange, and the PPP-over-TLS data tunnel. |
|
gp
Package gp implements the Palo Alto Networks GlobalProtect SSL VPN protocol: the HTTPS authentication and configuration exchange, and both of the data paths that exchange sets up.
|
Package gp implements the Palo Alto Networks GlobalProtect SSL VPN protocol: the HTTPS authentication and configuration exchange, and both of the data paths that exchange sets up. |
|
hostnet
Package hostnet owns the host-side network setup a veepin server needs but deliberately does not perform by itself: assigning the TUN interface its address, bringing it up, enabling IPv4 forwarding, and installing the NAT / FORWARD iptables rules that let a tunnel subnet reach the WAN.
|
Package hostnet owns the host-side network setup a veepin server needs but deliberately does not perform by itself: assigning the TUN interface its address, bringing it up, enabling IPv4 forwarding, and installing the NAT / FORWARD iptables rules that let a tunnel subnet reach the WAN. |
|
ikev1
Package ikev1 implements the IKEv1 (ISAKMP/Oakley, RFC 2407/2408/2409) key exchange behind two of veepin's protocols.
|
Package ikev1 implements the IKEv1 (ISAKMP/Oakley, RFC 2407/2408/2409) key exchange behind two of veepin's protocols. |
|
ikev2/aggfrag
Package aggfrag implements the AGGFRAG payload of RFC 9347 (IP-TFS): the aggregation and fragmentation format that replaces a plain inner IP packet inside an ESP SA once both peers have agreed USE_AGGFRAG.
|
Package aggfrag implements the AGGFRAG payload of RFC 9347 (IP-TFS): the aggregation and fragmentation format that replaces a plain inner IP packet inside an ESP SA once both peers have agreed USE_AGGFRAG. |
|
ikev2/eap
Package eap implements the minimal EAP machinery needed for IKEv2 username/password authentication: the EAP packet format (RFC 3748) and the EAP-MSCHAPv2 method (RFC 2759 / RFC 3079).
|
Package eap implements the minimal EAP machinery needed for IKEv2 username/password authentication: the EAP packet format (RFC 3748) and the EAP-MSCHAPv2 method (RFC 2759 / RFC 3079). |
|
ikev2/esp
Package esp implements a minimal userspace ESP (RFC 4303) data path with UDP encapsulation (RFC 3948).
|
Package esp implements a minimal userspace ESP (RFC 4303) data path with UDP encapsulation (RFC 3948). |
|
ikev2/ike
IKE_INTERMEDIATE (RFC 9242) carrying an additional key exchange (RFC 9370), which is how a post-quantum KEM is bolted onto IKEv2 without changing IKE_SA_INIT: the classical group still runs in IKE_SA_INIT, and ML-KEM runs in a protected exchange afterwards, so the KEM's large public key and ciphertext never appear in an unauthenticated, amplifiable datagram.
|
IKE_INTERMEDIATE (RFC 9242) carrying an additional key exchange (RFC 9370), which is how a post-quantum KEM is bolted onto IKEv2 without changing IKE_SA_INIT: the classical group still runs in IKE_SA_INIT, and ML-KEM runs in a protected exchange afterwards, so the KEM's large public key and ciphertext never appear in an unauthenticated, amplifiable datagram. |
|
ikev2/payload
Package payload implements IKEv2 wire-format encoding/decoding of the IKE header and payloads as defined by RFC 7296.
|
Package payload implements IKEv2 wire-format encoding/decoding of the IKE header and payloads as defined by RFC 7296. |
|
ikev2/probe
Package probe is a minimal IKEv2 initiator used to smoke-test a running server: it performs IKE_SA_INIT + IKE_AUTH (PSK or EAP-MSCHAPv2), requests a config address, then sends one ESP packet and reports the assigned address.
|
Package probe is a minimal IKEv2 initiator used to smoke-test a running server: it performs IKE_SA_INIT + IKE_AUTH (PSK or EAP-MSCHAPv2), requests a config address, then sends one ESP packet and reports the assigned address. |
|
ikev2/transform
Package transform maps IKEv2 IANA transform IDs onto concrete cryptographic primitives.
|
Package transform maps IKEv2 IANA transform IDs onto concrete cryptographic primitives. |
|
l2tp
Package l2tp implements the L2TP control and data channels (RFC 2661) that carry a PPP session over IPsec transport-mode ESP — the "L2TP/IPsec" a stock xl2tpd/strongSwan stack and every native-OS client speak.
|
Package l2tp implements the L2TP control and data channels (RFC 2661) that carry a PPP session over IPsec transport-mode ESP — the "L2TP/IPsec" a stock xl2tpd/strongSwan stack and every native-OS client speak. |
|
livingreadme
Package livingreadme rewrites the machine-managed regions of the project's README — the interop matrix, the microbenchmark table, and the interop throughput table — from results a CI job produces.
|
Package livingreadme rewrites the machine-managed regions of the project's README — the interop matrix, the microbenchmark table, and the interop throughput table — from results a CI job produces. |
|
masque
Package masque implements MASQUE CONNECT-IP (RFC 9484): IP-over-HTTP/3.
|
Package masque implements MASQUE CONNECT-IP (RFC 9484): IP-over-HTTP/3. |
|
masque/http3
Package http3 is the sliver of HTTP/3 that MASQUE needs, built on the public golang.org/x/net/quic package.
|
Package http3 is the sliver of HTTP/3 that MASQUE needs, built on the public golang.org/x/net/quic package. |
|
mgmt
Package mgmt is the supervisor's management plane: a small REST API for the listener directory that uses the supervisor.Manager as its data backend.
|
Package mgmt is the supervisor's management plane: a small REST API for the listener directory that uses the supervisor.Manager as its data backend. |
|
mgmt/ui
Package ui is the supervisor's server-rendered web panel.
|
Package ui is the supervisor's server-rendered web panel. |
|
mschap
Package mschap implements the MS-CHAPv2 authentication primitives (RFC 2759) and the MPPE key derivation (RFC 3079) that a PPP client needs, plus the higher-layer authentication key (HLAK) SSTP's crypto binding is built from.
|
Package mschap implements the MS-CHAPv2 authentication primitives (RFC 2759) and the MPPE key derivation (RFC 3079) that a PPP client needs, plus the higher-layer authentication key (HLAK) SSTP's crypto binding is built from. |
|
openvpn/control
Package control is OpenVPN's TLS control channel: it turns the lossy UDP datagram path into the ordered, reliable byte stream that crypto/tls runs its handshake over.
|
Package control is OpenVPN's TLS control channel: it turns the lossy UDP datagram path into the ordered, reliable byte stream that crypto/tls runs its handshake over. |
|
openvpn/data
Package data is the OpenVPN data channel: AES-256-GCM sealing and opening of P_DATA_V2 packets, with a replay window over the packet counter.
|
Package data is the OpenVPN data channel: AES-256-GCM sealing and opening of P_DATA_V2 packets, with a replay window over the packet counter. |
|
openvpn/keys
Package keys implements OpenVPN's "key method 2" key exchange and the key derivation that turns it into data-channel keys.
|
Package keys implements OpenVPN's "key method 2" key exchange and the key derivation that turns it into data-channel keys. |
|
openvpn/reliable
Package reliable is OpenVPN's control-channel reliability algorithm: the sliding-window retransmitting sender and the reordering, acknowledging receiver that together turn UDP into the ordered, lossless byte stream the TLS handshake needs.
|
Package reliable is OpenVPN's control-channel reliability algorithm: the sliding-window retransmitting sender and the reordering, acknowledging receiver that together turn UDP into the ordered, lossless byte stream the TLS handshake needs. |
|
openvpn/tlswrap
Package tlswrap implements OpenVPN's static-key control-channel protection: --tls-auth (an HMAC over every control packet) and --tls-crypt (authenticated encryption of every control packet).
|
Package tlswrap implements OpenVPN's static-key control-channel protection: --tls-auth (an HMAC over every control packet) and --tls-crypt (authenticated encryption of every control packet). |
|
openvpn/wire
Package wire is the OpenVPN packet codec: the opcode byte, session IDs, and the control-channel packet layout (the reliable messages that carry the TLS handshake and key negotiation).
|
Package wire is the OpenVPN packet codec: the opcode byte, session IDs, and the control-channel packet layout (the reliable messages that carry the TLS handshake and key negotiation). |
|
otp
Package otp implements the one-time password algorithms a VPN gateway needs for a second authentication factor: HOTP (RFC 4226) and the time-based TOTP (RFC 6238) built on it.
|
Package otp implements the one-time password algorithms a VPN gateway needs for a second authentication factor: HOTP (RFC 4226) and the time-based TOTP (RFC 6238) built on it. |
|
ppp
Package ppp is a minimal PPP implementation for tunnelling IP over a datagram transport — the link SSTP carries inside its data packets.
|
Package ppp is a minimal PPP implementation for tunnelling IP over a datagram transport — the link SSTP carries inside its data packets. |
|
profile
Package profile saves named client connection configurations under $XDG_CONFIG_HOME/veepin/profiles/ (default ~/.config/veepin/profiles/), one JSON file per profile.
|
Package profile saves named client connection configurations under $XDG_CONFIG_HOME/veepin/profiles/ (default ~/.config/veepin/profiles/), one JSON file per profile. |
|
pulse
Package pulse implements the Ivanti Connect Secure (formerly Pulse Connect Secure, formerly Juniper) VPN protocol: IF-T/TLS framing over an ordinary TLS connection, EAP inside it for authentication, a TLV configuration exchange, and either RFC 4303 ESP over UDP or the same IF-T/TLS connection for data.
|
Package pulse implements the Ivanti Connect Secure (formerly Pulse Connect Secure, formerly Juniper) VPN protocol: IF-T/TLS framing over an ordinary TLS connection, EAP inside it for authentication, a TLV configuration exchange, and either RFC 4303 ESP over UDP or the same IF-T/TLS connection for data. |
|
replay
Package replay implements the sliding-window anti-replay check shared by protocols whose data path uses a monotonic counter as both the replay identifier and the AEAD nonce.
|
Package replay implements the sliding-window anti-replay check shared by protocols whose data path uses a monotonic counter as both the replay identifier and the AEAD nonce. |
|
softether
Package softether implements the wire format of the SoftEther VPN native protocol (SE-VPN): Ethernet frames over TLS with a self-describing key/value serialisation called "PACK" for control messages, and raw Ethernet frames for data.
|
Package softether implements the wire format of the SoftEther VPN native protocol (SE-VPN): Ethernet frames over TLS with a self-describing key/value serialisation called "PACK" for control messages, and raw Ethernet frames for data. |
|
sshtun
Package sshtun is the wire glue for OpenSSH's layer-3 tunnel forwarding — the "tun@openssh.com" channel that `ssh -w` opens and `sshd` accepts under PermitTunnel.
|
Package sshtun is the wire glue for OpenSSH's layer-3 tunnel forwarding — the "tun@openssh.com" channel that `ssh -w` opens and `sshd` accepts under PermitTunnel. |
|
sstp/wire
Package wire is the SSTP packet codec ([MS-SSTP]): the 4-octet packet header that tells control packets from data packets, the control-message framing (message type plus a list of attributes), and the crypto-binding attribute layouts the handshake exchanges.
|
Package wire is the SSTP packet codec ([MS-SSTP]): the 4-octet packet header that tells control packets from data packets, the control-message framing (message type plus a list of attributes), and the crypto-binding attribute layouts the handshake exchanges. |
|
supervisor
Package supervisor runs multiple veepin servers in one process, mirroring the `veepin serve <proto>` command for each.
|
Package supervisor runs multiple veepin servers in one process, mirroring the `veepin serve <proto>` command for each. |
|
toy
Package toy implements TOY, a teaching protocol.
|
Package toy implements TOY, a teaching protocol. |
|
udpmux
Package udpmux turns one UDP socket into many per-peer net.Conns.
|
Package udpmux turns one UDP socket into many per-peer net.Conns. |
|
userdb
Package userdb reads the file of credentials a password-authenticating server accepts, and verifies one against it.
|
Package userdb reads the file of credentials a password-authenticating server accepts, and verifies one against it. |
|
wireguard/noise
Package noise implements WireGuard's Noise_IKpsk2 handshake as the initiator.
|
Package noise implements WireGuard's Noise_IKpsk2 handshake as the initiator. |
|
wireguard/transport
Package transport is WireGuard's data path: it turns the directional keys a completed handshake yields into type-4 transport messages and back.
|
Package transport is WireGuard's data path: it turns the directional keys a completed handshake yields into type-4 transport messages and back. |
|
wireguard/wire
Package wire is the WireGuard message codec: the four message types, their fixed layouts, and the demux extractor the data-plane pump needs.
|
Package wire is the WireGuard message codec: the four message types, their fixed layouts, and the demux extractor the data-plane pump needs. |
|
Package l2tp is the public entry point for L2TP/IPsec: an IKEv1-keyed IPsec transport SA (RFC 2409) carrying an L2TP tunnel (RFC 2661) and a PPP session over a userspace TUN.
|
Package l2tp is the public entry point for L2TP/IPsec: an IKEv1-keyed IPsec transport SA (RFC 2409) carrying an L2TP tunnel (RFC 2661) and a PPP session over a userspace TUN. |
|
Package l2tpv3 implements an L2TPv3 Ethernet pseudowire (RFC 3931 and RFC 4719), client and server.
|
Package l2tpv3 implements an L2TPv3 Ethernet pseudowire (RFC 3931 and RFC 4719), client and server. |
|
Package masque is the public entry point to MASQUE CONNECT-IP (RFC 9484): IP-over-HTTP/3, the first modern tunnel in veepin and the only one that needs a golang.org/x module beyond x/crypto — golang.org/x/net for QUIC.
|
Package masque is the public entry point to MASQUE CONNECT-IP (RFC 9484): IP-over-HTTP/3, the first modern tunnel in veepin and the only one that needs a golang.org/x module beyond x/crypto — golang.org/x/net for QUIC. |
|
Package nebula is the public entry point to this module's Nebula implementation: a mesh overlay in which every host is a peer, authenticated by a certificate its CA issued, and reachable either directly or through a lighthouse.
|
Package nebula is the public entry point to this module's Nebula implementation: a mesh overlay in which every host is a peer, authenticated by a certificate its CA issued, and reachable either directly or through a lighthouse. |
|
Package openvpn is the public entry point to this module's OpenVPN implementation: a UDP client that speaks OpenVPN's TLS control channel and AES-256-GCM data channel, over a userspace TUN.
|
Package openvpn is the public entry point to this module's OpenVPN implementation: a UDP client that speaks OpenVPN's TLS control channel and AES-256-GCM data channel, over a userspace TUN. |
|
Package pulse is the public entry point to the Ivanti Connect Secure VPN (formerly Pulse Connect Secure, formerly Juniper): IF-T/TLS framing over TLS, EAP inside it for authentication, and either RFC 4303 ESP over UDP or that same connection for data.
|
Package pulse is the public entry point to the Ivanti Connect Secure VPN (formerly Pulse Connect Secure, formerly Juniper): IF-T/TLS framing over TLS, EAP inside it for authentication, and either RFC 4303 ESP over UDP or that same connection for data. |
|
Package softether implements the SoftEther VPN native protocol (SE-VPN): Ethernet frames over TLS, using the SoftEther PACK serialisation for the control exchange.
|
Package softether implements the SoftEther VPN native protocol (SE-VPN): Ethernet frames over TLS, using the SoftEther PACK serialisation for the control exchange. |
|
Package ssh is the public entry point for using SSH as a VPN: it forwards IP over OpenSSH's layer-3 tunnel channel ("tun@openssh.com", what `ssh -w` opens under a server's PermitTunnel), over a userspace TUN.
|
Package ssh is the public entry point for using SSH as a VPN: it forwards IP over OpenSSH's layer-3 tunnel channel ("tun@openssh.com", what `ssh -w` opens under a server's PermitTunnel), over a userspace TUN. |
|
Package sstp is the public entry point for Microsoft's Secure Socket Tunneling Protocol (SSTP): TLS/TCP + HTTP CONNECT + PPP (MS-CHAPv2) + crypto binding.
|
Package sstp is the public entry point for Microsoft's Secure Socket Tunneling Protocol (SSTP): TLS/TCP + HTTP CONNECT + PPP (MS-CHAPv2) + crypto binding. |
|
tests
|
|
|
e2e/harness
command
Command harness is the browser-test backend for the management panel.
|
Command harness is the browser-test backend for the management panel. |
|
interop
Package interop holds Docker-based interoperability tests that run the veepin client and server against reference implementations: strongSwan for IKEv2/ESP and wireguard-go for WireGuard.
|
Package interop holds Docker-based interoperability tests that run the veepin client and server against reference implementations: strongSwan for IKEv2/ESP and wireguard-go for WireGuard. |
|
Package toy is the public entry point to TOY, a deliberately insecure teaching protocol.
|
Package toy is the public entry point to TOY, a deliberately insecure teaching protocol. |
|
AmneziaWG wire obfuscation.
|
AmneziaWG wire obfuscation. |