Make Interface.Inside an interface type (#252)
This commit updates the Interface.Inside type to be a new interface type instead of a *Tun. This will allow for an inside interface that does not use a tun device, such as a single-binary client that can run without elevated privileges.
This commit is contained in:
parent
4756c9613d
commit
9b06748506
16
interface.go
16
interface.go
|
@ -2,6 +2,8 @@ package nebula
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"io"
|
||||||
|
"net"
|
||||||
"os"
|
"os"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -10,10 +12,18 @@ import (
|
||||||
|
|
||||||
const mtu = 9001
|
const mtu = 9001
|
||||||
|
|
||||||
|
type Inside interface {
|
||||||
|
io.ReadWriteCloser
|
||||||
|
Activate() error
|
||||||
|
CidrNet() *net.IPNet
|
||||||
|
DeviceName() string
|
||||||
|
WriteRaw([]byte) error
|
||||||
|
}
|
||||||
|
|
||||||
type InterfaceConfig struct {
|
type InterfaceConfig struct {
|
||||||
HostMap *HostMap
|
HostMap *HostMap
|
||||||
Outside *udpConn
|
Outside *udpConn
|
||||||
Inside *Tun
|
Inside Inside
|
||||||
certState *CertState
|
certState *CertState
|
||||||
Cipher string
|
Cipher string
|
||||||
Firewall *Firewall
|
Firewall *Firewall
|
||||||
|
@ -31,7 +41,7 @@ type InterfaceConfig struct {
|
||||||
type Interface struct {
|
type Interface struct {
|
||||||
hostMap *HostMap
|
hostMap *HostMap
|
||||||
outside *udpConn
|
outside *udpConn
|
||||||
inside *Tun
|
inside Inside
|
||||||
certState *CertState
|
certState *CertState
|
||||||
cipher string
|
cipher string
|
||||||
firewall *Firewall
|
firewall *Firewall
|
||||||
|
@ -101,7 +111,7 @@ func (f *Interface) Run(tunRoutines, udpRoutines int, buildVersion string) {
|
||||||
l.WithError(err).Error("Failed to get udp listen address")
|
l.WithError(err).Error("Failed to get udp listen address")
|
||||||
}
|
}
|
||||||
|
|
||||||
l.WithField("interface", f.inside.Device).WithField("network", f.inside.Cidr.String()).
|
l.WithField("interface", f.inside.DeviceName()).WithField("network", f.inside.CidrNet().String()).
|
||||||
WithField("build", buildVersion).WithField("udpAddr", addr).
|
WithField("build", buildVersion).WithField("udpAddr", addr).
|
||||||
Info("Nebula interface is active")
|
Info("Nebula interface is active")
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ func newTunFromFd(deviceFd int, cidr *net.IPNet, defaultMTU int, routes []route,
|
||||||
ifce = &Tun{
|
ifce = &Tun{
|
||||||
ReadWriteCloser: file,
|
ReadWriteCloser: file,
|
||||||
fd: int(file.Fd()),
|
fd: int(file.Fd()),
|
||||||
Device: "tun0",
|
Device: "android",
|
||||||
Cidr: cidr,
|
Cidr: cidr,
|
||||||
DefaultMTU: defaultMTU,
|
DefaultMTU: defaultMTU,
|
||||||
TXQueueLen: txQueueLen,
|
TXQueueLen: txQueueLen,
|
||||||
|
@ -64,6 +64,13 @@ func (c *Tun) WriteRaw(b []byte) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c Tun) Activate() error {
|
func (c Tun) Activate() error {
|
||||||
c.Device = "android"
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Tun) CidrNet() *net.IPNet {
|
||||||
|
return c.Cidr
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Tun) DeviceName() string {
|
||||||
|
return c.Device
|
||||||
|
}
|
||||||
|
|
|
@ -68,6 +68,14 @@ func (c *Tun) Activate() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Tun) CidrNet() *net.IPNet {
|
||||||
|
return c.Cidr
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Tun) DeviceName() string {
|
||||||
|
return c.Device
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Tun) WriteRaw(b []byte) error {
|
func (c *Tun) WriteRaw(b []byte) error {
|
||||||
_, err := c.Write(b)
|
_, err := c.Write(b)
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -75,6 +75,14 @@ func (c *Tun) Activate() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Tun) CidrNet() *net.IPNet {
|
||||||
|
return c.Cidr
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Tun) DeviceName() string {
|
||||||
|
return c.Device
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Tun) WriteRaw(b []byte) error {
|
func (c *Tun) WriteRaw(b []byte) error {
|
||||||
_, err := c.Write(b)
|
_, err := c.Write(b)
|
||||||
return err
|
return err
|
||||||
|
|
10
tun_ios.go
10
tun_ios.go
|
@ -30,13 +30,13 @@ func newTunFromFd(deviceFd int, cidr *net.IPNet, defaultMTU int, routes []route,
|
||||||
file := os.NewFile(uintptr(deviceFd), "/dev/tun")
|
file := os.NewFile(uintptr(deviceFd), "/dev/tun")
|
||||||
ifce = &Tun{
|
ifce = &Tun{
|
||||||
Cidr: cidr,
|
Cidr: cidr,
|
||||||
|
Device: "iOS",
|
||||||
ReadWriteCloser: &tunReadCloser{f: file},
|
ReadWriteCloser: &tunReadCloser{f: file},
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Tun) Activate() error {
|
func (c *Tun) Activate() error {
|
||||||
c.Device = "iOS"
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,3 +103,11 @@ func (t *tunReadCloser) Write(from []byte) (int, error) {
|
||||||
func (t *tunReadCloser) Close() error {
|
func (t *tunReadCloser) Close() error {
|
||||||
return t.f.Close()
|
return t.f.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Tun) CidrNet() *net.IPNet {
|
||||||
|
return c.Cidr
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Tun) DeviceName() string {
|
||||||
|
return c.Device
|
||||||
|
}
|
||||||
|
|
|
@ -288,6 +288,14 @@ func (c Tun) Activate() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Tun) CidrNet() *net.IPNet {
|
||||||
|
return c.Cidr
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Tun) DeviceName() string {
|
||||||
|
return c.Device
|
||||||
|
}
|
||||||
|
|
||||||
func (c Tun) advMSS(r route) int {
|
func (c Tun) advMSS(r route) int {
|
||||||
mtu := r.mtu
|
mtu := r.mtu
|
||||||
if r.mtu == 0 {
|
if r.mtu == 0 {
|
||||||
|
|
|
@ -88,6 +88,14 @@ func (c *Tun) Activate() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Tun) CidrNet() *net.IPNet {
|
||||||
|
return c.Cidr
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Tun) DeviceName() string {
|
||||||
|
return c.Device
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Tun) WriteRaw(b []byte) error {
|
func (c *Tun) WriteRaw(b []byte) error {
|
||||||
_, err := c.Write(b)
|
_, err := c.Write(b)
|
||||||
return err
|
return err
|
||||||
|
|
Loading…
Reference in New Issue