diff --git a/README.md b/README.md index 2d14500..5b12c41 100644 --- a/README.md +++ b/README.md @@ -174,5 +174,17 @@ ListenPort = 5080 Target = service-three.servicenet:80 ``` +Wireproxy can also allow peers to connect to it: +``` +[Interface] +ListenPort = 5400 +... + +[Peer] +PublicKey = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY= +AllowedIPs = 10.254.254.100/32 +# Note there is no Endpoint defined here. +``` + # Stargazers over time [![Stargazers over time](https://starchart.cc/octeep/wireproxy.svg)](https://starchart.cc/octeep/wireproxy) diff --git a/config.go b/config.go index efcf0e1..10e543a 100644 --- a/config.go +++ b/config.go @@ -15,18 +15,19 @@ import ( type PeerConfig struct { PublicKey string PreSharedKey string - Endpoint string + Endpoint *string KeepAlive int AllowedIPs []netip.Prefix } // DeviceConfig contains the information to initiate a wireguard connection type DeviceConfig struct { - SecretKey string - Endpoint []netip.Addr - Peers []PeerConfig - DNS []netip.Addr - MTU int + SecretKey string + Endpoint []netip.Addr + Peers []PeerConfig + DNS []netip.Addr + MTU int + ListenPort *int } type TCPClientTunnelConfig struct { @@ -229,6 +230,14 @@ func ParseInterface(cfg *ini.File, device *DeviceConfig) error { device.MTU = value } + if sectionKey, err := section.GetKey("ListenPort"); err == nil { + value, err := sectionKey.Int() + if err != nil { + return err + } + device.ListenPort = &value + } + return nil } @@ -259,15 +268,14 @@ func ParsePeers(cfg *ini.File, peers *[]PeerConfig) error { peer.PreSharedKey = value } - decoded, err = parseString(section, "Endpoint") - if err != nil { - return err + if sectionKey, err := section.GetKey("Endpoint"); err == nil { + value := sectionKey.String() + decoded, err = resolveIPPAndPort(strings.ToLower(value)) + if err != nil { + return err + } + peer.Endpoint = &decoded } - decoded, err = resolveIPPAndPort(decoded) - if err != nil { - return err - } - peer.Endpoint = decoded if sectionKey, err := section.GetKey("PersistentKeepalive"); err == nil { value, err := sectionKey.Int() diff --git a/wireguard.go b/wireguard.go index 7d31085..b98bc35 100644 --- a/wireguard.go +++ b/wireguard.go @@ -26,15 +26,21 @@ func createIPCRequest(conf *DeviceConfig) (*DeviceSetting, error) { request.WriteString(fmt.Sprintf("private_key=%s\n", conf.SecretKey)) + if conf.ListenPort != nil { + request.WriteString(fmt.Sprintf("listen_port=%d\n", *conf.ListenPort)) + } + for _, peer := range conf.Peers { request.WriteString(fmt.Sprintf(heredoc.Doc(` public_key=%s - endpoint=%s persistent_keepalive_interval=%d preshared_key=%s `), - peer.PublicKey, peer.Endpoint, peer.KeepAlive, peer.PreSharedKey, + peer.PublicKey, peer.KeepAlive, peer.PreSharedKey, )) + if peer.Endpoint != nil { + request.WriteString(fmt.Sprintf("endpoint=%s\n", *peer.Endpoint)) + } if len(peer.AllowedIPs) > 0 { for _, ip := range peer.AllowedIPs {