Add VPN to wrouter
This commit is contained in:
parent
efcfac9b1d
commit
09b5f08626
@ -379,6 +379,8 @@ namespace EduNetworkBuilder
|
||||
NetworkLink nl;
|
||||
if (NB.GetComponentType(tPacket.WhereAmI) != GeneralComponentType.device) return false; //we cannot do this.
|
||||
NetworkDevice WhereFrom = (NetworkDevice)tPacket.WhereAmI;
|
||||
if (WhereFrom.hostname == "wrouter0" && tPacket.MyType == PacketType.ping_answer)
|
||||
Console.WriteLine("wearehere");
|
||||
NicType what = GetNicType;
|
||||
if (!tPacket.isFresh && WhereFrom.IsWirelessForwarder() && what == NicType.wlan)
|
||||
what = NicType.wport;
|
||||
@ -497,7 +499,7 @@ namespace EduNetworkBuilder
|
||||
case NicType.vpn:
|
||||
foreach (NetworkInterface nf in interfaces.ToList())
|
||||
{
|
||||
if (nf.isLocal(tPacket.OutboundIP))
|
||||
if (nf.isLocal(tPacket.OutboundIP, false))
|
||||
{
|
||||
//We need to tell the original packet that it is inside another packet
|
||||
tPacket.MyStatus = PacketStatus.encapsulated;
|
||||
@ -519,6 +521,29 @@ namespace EduNetworkBuilder
|
||||
if (tPacket.InboundNic == this)
|
||||
break; //This is the port we came in on. Do not sent it back out this port
|
||||
nPacket = new Packet(tPacket);
|
||||
if((tPacket.InboundNic != null && tPacket.InboundNic.GetNicType == NicType.wan) || tPacket.InboundNic == null)
|
||||
{
|
||||
//We need to find destination MAC and set source MAC
|
||||
nPacket.sourceMAC = MAC;
|
||||
//Update the MAC
|
||||
nPacket.destMAC = WhereFrom.LookupArpFromIP(tPacket.OutboundIP.GetIPString);
|
||||
if (nPacket.MyType == PacketType.arp_request)
|
||||
{
|
||||
nPacket.destMAC = NB.BroadcastMACString;
|
||||
}
|
||||
|
||||
if (nPacket.destMAC == "")
|
||||
{
|
||||
nPacket.AddMessage(DebugLevel.debug, " No Machine matching that IP address on this subnet. " + nPacket.destIP.GetIPString);
|
||||
Network mynet = NB.GetNetwork();
|
||||
NetworkDevice nd = mynet.GetDeviceFromID(myID);
|
||||
string hostname = "No Host";
|
||||
if (nd != null) hostname = nd.hostname;
|
||||
nPacket.Tracking.Status = hostname + " No Machine matching that IP address on this subnet. " + nPacket.destIP.GetIPString;
|
||||
nPacket.MyStatus = PacketStatus.finished_failed;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (HasBroadcastAddresses(tPacket.destIP))
|
||||
{
|
||||
//Broadcast packets will go to everything and we want a response from all of them.
|
||||
|
@ -120,6 +120,9 @@ namespace EduNetworkBuilder
|
||||
tnic = new NetworkCard(NICs.Count(), GetUniqueIdentifier, hostname, NicType.wport); //Add a wireless port
|
||||
NICs.Add(tnic);
|
||||
}
|
||||
//Add one vpn port
|
||||
tnic = new NetworkCard(0, GetUniqueIdentifier, hostname, NicType.vpn);
|
||||
NICs.Insert(1, tnic); //Make this first in the list - becomes second
|
||||
//Add one wan port
|
||||
tnic = new NetworkCard(0, GetUniqueIdentifier, hostname, NicType.wan);
|
||||
NICs.Insert(1, tnic); //Make this first in the list
|
||||
@ -1115,6 +1118,12 @@ namespace EduNetworkBuilder
|
||||
|
||||
public void TunnelPacketFromHere(IPAddress Destination, Packet Payload, string Encryption = "")
|
||||
{
|
||||
if(Destination == null)
|
||||
{
|
||||
Payload.MyStatus = PacketStatus.finished_failed;
|
||||
Payload.Tracking.AddMessage(DebugLevel.info, hostname, "Packet sent out tunnel but no endpoint set. Dropping");
|
||||
return;
|
||||
}
|
||||
PacketType TunType = PacketType.tun_packet;
|
||||
if (Encryption != "")
|
||||
TunType = PacketType.vpn_packet;
|
||||
@ -1305,6 +1314,7 @@ namespace EduNetworkBuilder
|
||||
// Store the nic on the packet, store the interface on the packet
|
||||
// Resume processing at the nic level, not the device level when the arp comes back
|
||||
int count = 0;
|
||||
bool PacketSentOutWAN = false;
|
||||
foreach(NetworkCard nic in NICs)
|
||||
{
|
||||
switch(nic.GetNicType)
|
||||
@ -1334,6 +1344,8 @@ namespace EduNetworkBuilder
|
||||
if(nic.SendPacketOutNIC(tPacket))
|
||||
{
|
||||
count++;
|
||||
if (nic.GetNicType == NicType.wan)
|
||||
PacketSentOutWAN = true;
|
||||
}
|
||||
tPacket.destMAC = tMAC;
|
||||
tPacket.OutboundDestMAC = ttMAC;
|
||||
@ -1341,7 +1353,11 @@ namespace EduNetworkBuilder
|
||||
break;
|
||||
case NicType.port:
|
||||
case NicType.wport:
|
||||
if (PacketSentOutWAN)
|
||||
continue; //do not send packets out of ports if they have been sent out a WAN nic
|
||||
NetworkCard tdNic = dNic;
|
||||
if (hostname == "wrouter0" && tPacket.MyType == PacketType.ping_answer)
|
||||
Console.WriteLine("wearehere");
|
||||
if (myType == NetworkComponentType.wrouter)
|
||||
{
|
||||
//On wRouters, the wPorts are hubs, but the ports are switches
|
||||
@ -1355,7 +1371,7 @@ namespace EduNetworkBuilder
|
||||
if (nic.GetNicType == NicType.wport)
|
||||
tdNic = null; //Hubs/WAPs never know the dnic. They still need the sNic, however
|
||||
}
|
||||
if (!ExactMatch && !MacAddressMatch)
|
||||
if (!ExactMatch && (!MacAddressMatch || ForwardsPackets()))
|
||||
{
|
||||
//If the packet does not terminate here, and we are not routing it to here...
|
||||
//Pass it to the port. The port duplicates it and sends it out
|
||||
|
@ -84,9 +84,11 @@ namespace EduNetworkBuilder
|
||||
IPAddressEntry ipe = new IPAddressEntry(myIP,ND);
|
||||
ipe.ShowDialog();
|
||||
}
|
||||
public bool isLocal(IPAddress tIp)
|
||||
public bool isLocal(IPAddress tIp, bool AllowZeroMatch = true)
|
||||
{
|
||||
if (tIp == null) return false;
|
||||
if (!AllowZeroMatch && (myIP == null || myIP.GetIP == 0))
|
||||
return false;
|
||||
if (myIP.IsLocal(tIp))
|
||||
return true;
|
||||
return false;
|
||||
|
@ -145,6 +145,7 @@ namespace EduNetworkBuilder
|
||||
WhereAmI = start;
|
||||
payloadData = payload;
|
||||
MyType = theType;
|
||||
|
||||
if (theType != PacketType.arp_answer && theType != PacketType.arp_request)
|
||||
{
|
||||
sourceIP = new IPAddress(NB.ZeroIPString);
|
||||
|
Loading…
Reference in New Issue
Block a user