|
|
|
@ -566,7 +566,6 @@ func makeNestable(t *testing.T) (logf logger.Logf, setT func(t *testing.T)) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestTwoDevicePing(t *testing.T) {
|
|
|
|
|
t.Run("real", func(t *testing.T) {
|
|
|
|
|
l, ip := nettype.Std{}, netaddr.IPv4(127, 0, 0, 1)
|
|
|
|
|
n := &devices{
|
|
|
|
|
m1: l,
|
|
|
|
@ -577,8 +576,9 @@ func TestTwoDevicePing(t *testing.T) {
|
|
|
|
|
stunIP: ip,
|
|
|
|
|
}
|
|
|
|
|
testTwoDevicePing(t, n)
|
|
|
|
|
})
|
|
|
|
|
t.Run("natlab", func(t *testing.T) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestActiveDiscovery(t *testing.T) {
|
|
|
|
|
t.Run("simple_internet", func(t *testing.T) {
|
|
|
|
|
t.Parallel()
|
|
|
|
|
mstun := &natlab.Machine{Name: "stun"}
|
|
|
|
@ -625,9 +625,79 @@ func TestTwoDevicePing(t *testing.T) {
|
|
|
|
|
}
|
|
|
|
|
testActiveDiscovery(t, n)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("facing_nats", func(t *testing.T) {
|
|
|
|
|
mstun := &natlab.Machine{Name: "stun"}
|
|
|
|
|
m1 := &natlab.Machine{
|
|
|
|
|
Name: "m1",
|
|
|
|
|
PacketHandler: &natlab.Firewall{},
|
|
|
|
|
}
|
|
|
|
|
nat1 := &natlab.Machine{
|
|
|
|
|
Name: "nat1",
|
|
|
|
|
}
|
|
|
|
|
m2 := &natlab.Machine{
|
|
|
|
|
Name: "m2",
|
|
|
|
|
PacketHandler: &natlab.Firewall{},
|
|
|
|
|
}
|
|
|
|
|
nat2 := &natlab.Machine{
|
|
|
|
|
Name: "nat2",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
inet := natlab.NewInternet()
|
|
|
|
|
lan1 := &natlab.Network{
|
|
|
|
|
Name: "lan1",
|
|
|
|
|
Prefix4: mustPrefix("192.168.0.0/24"),
|
|
|
|
|
}
|
|
|
|
|
lan2 := &natlab.Network{
|
|
|
|
|
Name: "lan2",
|
|
|
|
|
Prefix4: mustPrefix("192.168.1.0/24"),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sif := mstun.Attach("eth0", inet)
|
|
|
|
|
nat1WAN := nat1.Attach("wan", inet)
|
|
|
|
|
nat1LAN := nat1.Attach("lan1", lan1)
|
|
|
|
|
nat2WAN := nat2.Attach("wan", inet)
|
|
|
|
|
nat2LAN := nat2.Attach("lan2", lan2)
|
|
|
|
|
m1if := m1.Attach("eth0", lan1)
|
|
|
|
|
m2if := m2.Attach("eth0", lan2)
|
|
|
|
|
lan1.SetDefaultGateway(nat1LAN)
|
|
|
|
|
lan2.SetDefaultGateway(nat2LAN)
|
|
|
|
|
|
|
|
|
|
nat1.PacketHandler = &natlab.SNAT44{
|
|
|
|
|
Machine: nat1,
|
|
|
|
|
ExternalInterface: nat1WAN,
|
|
|
|
|
Firewall: &natlab.Firewall{
|
|
|
|
|
TrustedInterface: nat1LAN,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
nat2.PacketHandler = &natlab.SNAT44{
|
|
|
|
|
Machine: nat2,
|
|
|
|
|
ExternalInterface: nat2WAN,
|
|
|
|
|
Firewall: &natlab.Firewall{
|
|
|
|
|
TrustedInterface: nat2LAN,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
n := &devices{
|
|
|
|
|
m1: m1,
|
|
|
|
|
m1IP: m1if.V4(),
|
|
|
|
|
m2: m2,
|
|
|
|
|
m2IP: m2if.V4(),
|
|
|
|
|
stun: mstun,
|
|
|
|
|
stunIP: sif.V4(),
|
|
|
|
|
}
|
|
|
|
|
testActiveDiscovery(t, n)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func mustPrefix(s string) netaddr.IPPrefix {
|
|
|
|
|
pfx, err := netaddr.ParseIPPrefix(s)
|
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
return pfx
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type devices struct {
|
|
|
|
|
m1 nettype.PacketListener
|
|
|
|
|
m1IP netaddr.IP
|
|
|
|
@ -734,8 +804,8 @@ func testActiveDiscovery(t *testing.T, d *devices) {
|
|
|
|
|
logf("direct link %s->%s found with addr %s", m1, m2, pst.CurAddr)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
logf("no direct tunnel yet, addrs %v", pst.Addrs)
|
|
|
|
|
time.Sleep(10 * time.Millisecond)
|
|
|
|
|
logf("no direct path %s->%s yet, addrs %v", m1, m2, pst.Addrs)
|
|
|
|
|
time.Sleep(100 * time.Millisecond)
|
|
|
|
|
}
|
|
|
|
|
t.Errorf("magicsock did not find a direct path from %s to %s", m1, m2)
|
|
|
|
|
}
|
|
|
|
|