Skip to content

Commit

Permalink
feat: add interface black list to avoid undesired interfaces
Browse files Browse the repository at this point in the history
  • Loading branch information
braginini committed May 16, 2021
1 parent 47933bc commit a773ec8
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 18 deletions.
7 changes: 4 additions & 3 deletions cmd/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@ type Config struct {
Peers []connection.Peer
StunTurnURLs []*ice.URL
// host:port of the signal server
SignalAddr string
WgAddr string
WgIface string
SignalAddr string
WgAddr string
WgIface string
IFaceBlackList []string
}

//Write writes configPath to a file
Expand Down
6 changes: 5 additions & 1 deletion cmd/up.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,11 @@ var (
//todo proper close handling
defer func() { signalClient.Close() }()

engine := connection.NewEngine(signalClient, config.StunTurnURLs, config.WgIface, config.WgAddr)
iFaceBlackList := make(map[string]struct{})
for i := 0; i < len(config.IFaceBlackList); i += 2 {
iFaceBlackList[config.IFaceBlackList[i]] = struct{}{}
}
engine := connection.NewEngine(signalClient, config.StunTurnURLs, config.WgIface, config.WgAddr, iFaceBlackList)

err = engine.Start(myKey, config.Peers)

Expand Down
11 changes: 10 additions & 1 deletion connection/connection.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ type ConnConfig struct {
RemoteWgKey wgtypes.Key

StunTurnURLS []*ice.URL

iFaceBlackList map[string]struct{}
}

type IceCredentials struct {
Expand Down Expand Up @@ -88,6 +90,13 @@ func (conn *Connection) Open(timeout time.Duration) error {
a, err := ice.NewAgent(&ice.AgentConfig{
NetworkTypes: []ice.NetworkType{ice.NetworkTypeUDP4},
Urls: conn.Config.StunTurnURLS,
InterfaceFilter: func(s string) bool {
if conn.Config.iFaceBlackList == nil {
return true
}
_, ok := conn.Config.iFaceBlackList[s]
return !ok
},
})
conn.agent = a

Expand Down Expand Up @@ -280,7 +289,7 @@ func (conn *Connection) listenOnConnectionStateChanges() error {
log.Errorf("failed selecting active ICE candidate pair %s", err)
return
}
log.Debugf("closed to peer %s via selected candidate pair %s", conn.Config.RemoteWgKey.String(), pair)
log.Infof("will connect to peer %s via a selected connnection candidate pair %s", conn.Config.RemoteWgKey.String(), pair)
} else if state == ice.ConnectionStateDisconnected || state == ice.ConnectionStateFailed {
// todo do we really wanna have a connection restart within connection itself? Think of moving it outside
err := conn.Close()
Expand Down
31 changes: 18 additions & 13 deletions connection/engine.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,20 +23,24 @@ type Engine struct {
wgIface string
// Wireguard local address
wgIp string

iFaceBlackList map[string]struct{}
}

type Peer struct {
WgPubKey string
WgAllowedIps string
}

func NewEngine(signal *signal.Client, stunsTurns []*ice.URL, wgIface string, wgAddr string) *Engine {
func NewEngine(signal *signal.Client, stunsTurns []*ice.URL, wgIface string, wgAddr string,
iFaceBlackList map[string]struct{}) *Engine {
return &Engine{
stunsTurns: stunsTurns,
signal: signal,
wgIface: wgIface,
wgIp: wgAddr,
conns: map[string]*Connection{},
stunsTurns: stunsTurns,
signal: signal,
wgIface: wgIface,
wgIp: wgAddr,
conns: map[string]*Connection{},
iFaceBlackList: iFaceBlackList,
}
}

Expand Down Expand Up @@ -101,13 +105,14 @@ func (e *Engine) openPeerConnection(wgPort int, myKey wgtypes.Key, peer Peer) (*

remoteKey, _ := wgtypes.ParseKey(peer.WgPubKey)
connConfig := &ConnConfig{
WgListenAddr: fmt.Sprintf("127.0.0.1:%d", wgPort),
WgPeerIp: e.wgIp,
WgIface: e.wgIface,
WgAllowedIPs: peer.WgAllowedIps,
WgKey: myKey,
RemoteWgKey: remoteKey,
StunTurnURLS: e.stunsTurns,
WgListenAddr: fmt.Sprintf("127.0.0.1:%d", wgPort),
WgPeerIp: e.wgIp,
WgIface: e.wgIface,
WgAllowedIPs: peer.WgAllowedIps,
WgKey: myKey,
RemoteWgKey: remoteKey,
StunTurnURLS: e.stunsTurns,
iFaceBlackList: e.iFaceBlackList,
}

signalOffer := func(uFrag string, pwd string) error {
Expand Down

0 comments on commit a773ec8

Please sign in to comment.