Re: [lwip-users] IP forwarding to/from PPP working for one netif, but not another

2020-02-14 Thread Sylvain Rochet
Hi Andrew,

On Tue, Feb 11, 2020 at 11:47:04AM +0100, goldsi...@gmx.de wrote:
> Am 11.02.2020 um 10:20 schrieb Andrew Pullin:
> > [..]
> > 
> > The part that I am stuck on presently is that Host2 has no knowledge of 
> > how to route packets from PPP out to the WAN, say, 8.8.8.8.
> > Between ip4_forward, IP_FORWARD, ip4_route_src, LWIP_HOOK_IP4_ROUTE, 
> > LWIP_HOOK_IP4_ROUTE_SRC, and the ESP32 port modifications, I am not 
> > quite sure where to make the right intervention. It is ... a lot to take in.
> > 
> > As far as I understand the standard usage of the stack for a single 
> > netif, outgoing packets elide the entire forwarding/routing system 
> > because they are specified to be transmitted on a particular netif? Is 
> > that right?
> > 
> > Fundamentally, I only have eth0 and pp1  (to use the lwip netif naming 
> > system) and anything not specifically with IP dest = eth0 or pp1 should 
> > be sent on towards Host2's gateway (after NAT source address IP rewriting).
> > Is that logically complete, and if so, where should it be implemented?
> 
> I would think you'd just set the ppp netif as default netif (so it is
> just used for all outgoing trafic where no better route is found) and
> keep eth0 without a gateway (which should ensure only matching subnet
> packets are transmitted on this netif).

Yes, but the default netif (default route) must be set on eth0, not pp1 :)

Sylvain


signature.asc
Description: Digital signature
___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

Re: [lwip-users] IP forwarding to/from PPP working for one netif, but not another

2020-02-11 Thread goldsi...@gmx.de
Am 11.02.2020 um 10:20 schrieb Andrew Pullin:
> [..]
> 
> The part that I am stuck on presently is that Host2 has no knowledge of 
> how to route packets from PPP out to the WAN, say, 8.8.8.8.
> Between ip4_forward, IP_FORWARD, ip4_route_src, LWIP_HOOK_IP4_ROUTE, 
> LWIP_HOOK_IP4_ROUTE_SRC, and the ESP32 port modifications, I am not 
> quite sure where to make the right intervention. It is ... a lot to take in.
> 
> As far as I understand the standard usage of the stack for a single 
> netif, outgoing packets elide the entire forwarding/routing system 
> because they are specified to be transmitted on a particular netif? Is 
> that right?
> 
> Fundamentally, I only have eth0 and pp1  (to use the lwip netif naming 
> system) and anything not specifically with IP dest = eth0 or pp1 should 
> be sent on towards Host2's gateway (after NAT source address IP rewriting).
> Is that logically complete, and if so, where should it be implemented?

I would think you'd just set the ppp netif as default netif (so it is
just used for all outgoing trafic where no better route is found) and
keep eth0 without a gateway (which should ensure only matching subnet
packets are transmitted on this netif).

Regards,
Simon



signature.asc
Description: OpenPGP digital signature
___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

Re: [lwip-users] IP forwarding to/from PPP working for one netif, but not another

2020-02-11 Thread Andrew Pullin

On 1/31/2020 4:48 PM, Sylvain Rochet wrote:

Or how host3/C could be configured for routing a subnet (now
11.0.0.0/32) that is essentially "private" between host2/B and
host1/A. That is the "192.168.0.0/24 via 172.16.1.1" route in your
example, or "11.0.0.0/32 via 10.0.0.016" in my case.

It seems like what I actually do want is NAT capability on host2, so
that the host1<->host2 connection would be abstracted away. But it
looks like there are only a few few-years-old implementations of NAT
for lwip. Uh oh. I would really like to avoid trying to integrate that
in from an old branch of lwip.

Any idea if I can get this to work without needing to try to bring up
NAT?

It it were me and if I don't need Host2 to reach "outside" and Host1
software can't be changed, I would just write a big hack to forward
relevant packets (e.g. no DHCP, no ARP, IP) to the PPP link, pushing the
DHCP assigned address to the PPP peer Host1 so NAT is not necessary at
all and nothing have to be done for Host1 to send packets to "outside".

And if it were me and if I need Host2 to reach "outside" and Host1
software can't be changed, I would write a quick'n'dirty ARP Proxy
support, probably at the Ethernet low level driver. Note, in this case,
it is normal for the PPP link to be within the Host2/Host3 subnet, it is
actually mandatory. But doing so won't work if you need DHCP support
because you need DHCP server to offer two addresses (one for Host2, one
for Host1), so you need two MAC addresses and two DHCP clients running.
It's way more difficult than just hacking the forwarding and sharing the
same address.

But, above all, if it were me, I would just write a TCP or UDP proxy on
Host2. Host1 would then only establish TCP or UDP sessions to Host2 with
a home made proxy protocol (basically packets with two destination IP
fields), and Host2 would create the real session to the outside world.

Host1 - Host2  Host3 -- Internet
192.168.0.1   192.168.0.2   10.0.200.113   192.0.2.1
<---TCP1>   <---TCP2--->

TCP1:
src: 192.168.0.1
dst: 192.168.0.2
real-dst: 192.0.2.1 (in TCP payload, e.g. at the
  beginning of the TCP session)

TCP2 (created on the fly using payload hidden real-dst):
src: 10.0.200.113
dst: 192.0.2.1


Wow, thanks for all the good ideas.
I can mostly change the code on both Host1 and Host2 here, but I am 
really trying to do this with minimal changes to the upper layers, 
especially on Host1. As described: end up with a transparently "working" 
internet connection there.


The ARP proxy case is fascinating. Since Host1 used to be a fully 
internet connected device, it has everything it would need, i.e. a DHCP 
client, DNS client, etc. If I could make Host2 appear to represent two 
devices with two valid (IEEE registered) MAC addresses and the network 
operator was OK with two DHCP clients existing in one physical box, that 
seems like a good solution.

But: modifying the low-level ethernet driver seem daunting.

The TCP proxy case also seems quite interesting, since it should be all 
app layer code, and only need a TCP listener and TCP client.
Alas, we also need UDP for DNS. For TCP, it would be easy enough to 
start the stream with the target IP:port and a verifier, but for UDP, 
the datragram would have to be dissected, deal with the IP 
pseudo-header, etc.


But here's the good news: I found a patch to add NAPT functionality to 
lwip, I am sure it has been linked to somewhere in this mailing list before:

https://gist.github.com/NeoCat/da3c141813980edaa256ad351cab3a2c

Seems pretty interesting, and it seems like it is almost working, too. 
This would be a great solution, since then I can run a private static IP 
subnet between Host1 <-> Host2, and to the upstream router, it should 
just look like a single device Host2 (other than NAT detection via TTL 
or other methods).


The part that I am stuck on presently is that Host2 has no knowledge of 
how to route packets from PPP out to the WAN, say, 8.8.8.8.
Between ip4_forward, IP_FORWARD, ip4_route_src, LWIP_HOOK_IP4_ROUTE, 
LWIP_HOOK_IP4_ROUTE_SRC, and the ESP32 port modifications, I am not 
quite sure where to make the right intervention. It is ... a lot to take in.


As far as I understand the standard usage of the stack for a single 
netif, outgoing packets elide the entire forwarding/routing system 
because they are specified to be transmitted on a particular netif? Is 
that right?


Fundamentally, I only have eth0 and pp1  (to use the lwip netif naming 
system) and anything not specifically with IP dest = eth0 or pp1 should 
be sent on towards Host2's gateway (after NAT source address IP rewriting).

Is that logically complete, and if so, where should it be implemented?

Thanks,
Andrew Pullin


___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

Re: [lwip-users] IP forwarding to/from PPP working for one netif, but not another

2020-01-31 Thread Sylvain Rochet
Hi Simon,

On Thu, Jan 30, 2020 at 10:11:23PM +0100, goldsi...@gmx.de wrote:
> 
> Well, yes, my bad. The question wasn't phrased well. The thing I don't
> understand (because I'm not using it) probably all boils down to using
> lwIP as a PPP 'proxy' to remote networks without doing NAT at the same
> time (which we don't support in mainline). That's not standard routing...

Or the contrary, that's standard IP routing, it's just totally useless 
with residential ISPs because most don't allow customers to add route 
entries on their gateway so it's just a flat subnet with no routing 
capability. Business ISPs usually offer the option, it's very common for 
business customers to have a delegated subnet that's properly routable.

Sylvain


signature.asc
Description: Digital signature
___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

Re: [lwip-users] IP forwarding to/from PPP working for one netif, but not another

2020-01-31 Thread Sylvain Rochet
Hi Andrew,

On Fri, Jan 31, 2020 at 12:11:56AM -0800, Andrew Pullin wrote:
> On 1/30/20 11:42 AM, Sylvain Rochet wrote:
> > 
> > 10.0.0.1/32 and 10.0.0.2/32 are within 10.0.0.0/16 subnet, that
> > shouldn't be a problem here, this is usually a bad practice and it
> > should be avoided. This is a problem for hosts on 10.0.0.0/16 that don't
> > know there is a hole in the subnet, since there are only 3 hosts here,
> > which is an expection rather than the rule, it is safe by luck.
> 
> This seems relatively easy to fix: I can just change the PPP-negotiated IP's
> to 11.0.0.0/32, so the host1 and host2 devices are on a different subnet on
> the PPP side.

11.0.0.0/32 is outside RFC1918 private subnets, using it sounds like a 
bad idea.


> As for the /32, I am unsure if I need to change that. Do I?

The netmask is only meaningful for layer 2 with a broadcast domain (e.g. 
Ethernet), PPP is point to point, there is only one peer, netmask as no 
meaning.

(To be fair that's not entirely true, it use to be used for PPP to 
provide more than one IPv4 addresses to customers, but I don't think 
it's still used in the wild, and it's still not a broadcast domain, it's 
just a pool of addresses.)


> Darn. I saw some code for "UNUSED - PROXY ARP", but it was all removed with
> #if 0 blocks.

You are lost in the wrong place ;-), ARP Proxy support have to live in 
the Ethernet ARP driver, and that support does not exist. What you saw 
is just PPP support to add a Proxy ARP rule into the Ethernet driver 
(basically no more than one function call :-), it is not the ARP Proxy 
support.


> Here is where I am starting to get worried about how I am possibly going
> make this solution work.
> I am trying to, in general, get my host1 device connected to the outside
> world via host2's connection to host3.
> 
> The motivation for doing this via IP stacks is because my host1 (PPP client)
> already has a ton of code implemented using TCP/IP; host1 is a piece of
> hardware that used to have its own MAC/PHY, but is now being repurposed.
> Being able to re-use all of that code without having to remap every function
> at a high-level to some other mechanism (say, AT commands, also needing
> host2 implementations) will be a huge boon.
> 
> My knowledge here is clearly limited, but is there a general or dynamic way
> to set up the routes I would need here?
> 
> Since I want to be able to attach host2 to any existing network and have
> this system work, I think this is what I would need.
> 
> I do not know how host2/B could pass the information needed to host1/A to
> configure the next hop route, or "172.16.1.0/24 via 192.168.0.2" in your
> example. This seems like it would require a mechanism for host2/B to
> disclose to host1/A what IP address it gets (say, via DHCP) on it's eth0
> side.

It exists… it's called OSPF… but… erm… don't expect that to be available 
behind a set-top box or whatever "gateway/router" used by ISP.

I'm running OSPF at home but I'm not the regular ISP customer :-)


> Or how host3/C could be configured for routing a subnet (now 
> 11.0.0.0/32) that is essentially "private" between host2/B and 
> host1/A. That is the "192.168.0.0/24 via 172.16.1.1" route in your 
> example, or "11.0.0.0/32 via 10.0.0.016" in my case.
> 
> It seems like what I actually do want is NAT capability on host2, so 
> that the host1<->host2 connection would be abstracted away. But it 
> looks like there are only a few few-years-old implementations of NAT 
> for lwip. Uh oh. I would really like to avoid trying to integrate that 
> in from an old branch of lwip.
> 
> Any idea if I can get this to work without needing to try to bring up 
> NAT?

It it were me and if I don't need Host2 to reach "outside" and Host1 
software can't be changed, I would just write a big hack to forward 
relevant packets (e.g. no DHCP, no ARP, IP) to the PPP link, pushing the 
DHCP assigned address to the PPP peer Host1 so NAT is not necessary at 
all and nothing have to be done for Host1 to send packets to "outside".

And if it were me and if I need Host2 to reach "outside" and Host1 
software can't be changed, I would write a quick'n'dirty ARP Proxy 
support, probably at the Ethernet low level driver. Note, in this case, 
it is normal for the PPP link to be within the Host2/Host3 subnet, it is 
actually mandatory. But doing so won't work if you need DHCP support 
because you need DHCP server to offer two addresses (one for Host2, one 
for Host1), so you need two MAC addresses and two DHCP clients running. 
It's way more difficult than just hacking the forwarding and sharing the 
same address.

But, above all, if it were me, I would just write a TCP or UDP proxy on 
Host2. Host1 would then only establish TCP or UDP sessions to Host2 with 
a home made proxy protocol (basically packets with two destination IP 
fields), and Host2 would create the real session to the outside world.

Host1 - Host2  Host3 -- Internet
192.168.0.1   

Re: [lwip-users] IP forwarding to/from PPP working for one netif, but not another

2020-01-31 Thread Andrew Pullin

On 1/30/20 11:42 AM, Sylvain Rochet wrote:

There are no ARP in PPP, but whatever, this configuration is correct.
Roger that. At the very least, ARP is enabled on the NetX equivalent of 
a netif on the PPP-only host.

But it must be inactive and not accomplishing anything.

10.0.0.1/32 and 10.0.0.2/32 are within 10.0.0.0/16 subnet, that
shouldn't be a problem here, this is usually a bad practice and it
should be avoided. This is a problem for hosts on 10.0.0.0/16 that don't
know there is a hole in the subnet, since there are only 3 hosts here,
which is an expection rather than the rule, it is safe by luck.


This seems relatively easy to fix: I can just change the PPP-negotiated 
IP's to 11.0.0.0/32, so the host1 and host2 devices are on a different 
subnet on the PPP side.


As for the /32, I am unsure if I need to change that. Do I?


WiFi AP's:
     - AP only (no routing)
     - Connected to Host3 by Ethernet
     - MACs 0c:8d:db:6e:f0:03 or 0c:8d:db:6e:f0:88 (can't control
association)

Host3:
     - Router (pfSense)
     - DHCP server runs here
     - Routes to WAN, does NAT, eth0 <-> eth1
     - default route: set by DHCP, toward eth1
     - no other route (as far as I know)
     - Intranet WiFi AP's are connected via switch to eth0
     - Intranet Ethernet devices are connected via switch to eth0
     - eth0 : 10.0.1.1/16 , facing intranet, MAC 00:e0:67:18:54:95
     - eth1 : IP from ISP, facing public IPv4 internet, MAC 00:e0:67:18:54:94

Here is the real problem, you need a route on Host3 telling that
10.0.0.2/32 is behind 10.0.200.136 (or 10.0.200.113). You can also add a
route for 10.0.0.1/32 but it's just a bonus.

Without this route, Host3 don't know how to route the packet and will
try to find an host on the 10.0.0.0/16 subnet using ARP. Then it's just
luck, and depends on what Host3 and Host2 are doing:

- If the packet is sent in a broadcast Ethernet frame by Host3 it might
works if Host2 catches the packet and forwards it to Host1.

- If the ARP request gets answered by Host2 when Host3 send their ARP
request to find who is 10.0.0.2 on the 10.0.0.0/16 subnet, then it also
works. This is known as ARP Proxy, lwIP does not support that.

It's just luck, using lazy features of IP stack to make it works even if
the configuration is broken should be avoided :-)
Darn. I saw some code for "UNUSED - PROXY ARP", but it was all removed 
with #if 0 blocks.

Layout:

Host1 <-> Host2 <-> Host3
<-> public internet
     PPPoS                     Ethernet

or

Host1 <-> Host2 <>  WiFi AP
<--> Host3 <---> public internet
     PPPoS WiFi      Ethernet


For the case of using the WiFi connection, there are separate WiFi AP's in
the way.
Other than that, the two cases are host2 connecting to the local subnet via
wlan0 or connecting via eth0.

I guess the only reason it works with WiFi and not with Ethernet is
because WiFi is intrinsically broadcast-based while Ethernet is switched
(well, I hope so, unless you live in '90s :p). This is the "works
because Host2 catches the broadcast packet" case I've said before.
Wow. What a situation ... good to know there is a rational explanation 
as to why it worked with seemingly no network setup difference.



I am not manually adding any static routes in either Host1 or Host2.
I was worried that Host2 would not be able to accomplish the "connection
sharing" until I found the IP_FORWARDING option. That initially worked with
Host2 using WiFi without any manually added static routes.

This is not "connection sharing", this is IP routing, not NAT !,
"connection sharing" is usually used for hosts that do SNAT on their
Interface facing Internet.

IP routing needs a complete routing table on all hosts telling how to
reach (i.e. which next-hop to use) every host of the whole network.

Example with 2 subnets and 3 Hosts:

A-eth0  - eth0-B-eth1 - eth0-C
   192.168.0.1/24192.168.0.2/24   172.16.1.1/24 172.16.1.2/24

Host A routing table:
192.168.0.0/24 dev eth0
172.16.1.0/24 via 192.168.0.2

Host B routing table:
192.168.0.0/24 dev eth0
172.16.1.0/24 dev eth1

Host C routing table:
192.168.0.0/24 via 172.16.1.1
172.16.1.0/24 dev eth0

dev = directly connected
via = next-hop, gateway if you prefer

What you could see is that each host have a similar routing table, just
the next-hop changes. Default route is just a way to reduce the routing
table size by removing all entries that have an identical next-hop.


Here is where I am starting to get worried about how I am possibly going 
make this solution work.
I am trying to, in general, get my host1 device connected to the outside 
world via host2's connection to host3.


The motivation for doing this via IP stacks is because my host1 (PPP 
client) already has a ton of code implemented using TCP/IP; host1 is a 
piece of hardware that 

Re: [lwip-users] IP forwarding to/from PPP working for one netif, but not another

2020-01-30 Thread goldsi...@gmx.de

Am 30.01.2020 um 22:02 schrieb Sylvain Rochet:

Hi Simon,

On Thu, Jan 30, 2020 at 09:31:11PM +0100, goldsi...@gmx.de wrote:

Am 30.01.2020 um 20:42 schrieb Sylvain Rochet:

On Wed, Jan 29, 2020 at 08:15:11PM -0800, Andrew Pullin wrote:


Host2:
     - Micontroller device, ESP32
     - has both WiFi and Ethernet PHY hardware (IP101GRI Ethernet PHY), used
mutually exclusively
     - Running lwIP
     - WiFi and Ethernet are independently verified to work to reach WAN from
this host
     - PPPoS server
     - ppp0 : 10.0.0.1/32
         - IP for server and client are hard-coded in
         - I believe it is /32, as the netmask is reported as 255.255.255.255
     - When running w/ WiFi:
         - wlan0 : ip 10.0.200.136/16  (IP and /16 from DHCP server)
     - When running w/ Ethernet:
         - eth0 : ip 10.0.200.113/16  (IP and /16 from DHCP server)


One odd thing I find here is that lwIP does not support 2 interfaces in
the same subnet. So you would have to take care that only one netif at a
time has its link set up (or its address set or its administrative
status up, or whatever). In any case, having both wlan0 and eth0 up and
running with an address in the same subnet will result in packets being
accepted on both netifs but transmitted on whichever was registered last
(or was it first?).


I assumed that both were not active at the same time, good catch, this
might be an issue as well.



This is not "connection sharing", this is IP routing, not NAT !,
"connection sharing" is usually used for hosts that do SNAT on their
Interface facing Internet.

IP routing needs a complete routing table on all hosts telling how to
reach (i.e. which next-hop to use) every host of the whole network.

Example with 2 subnets and 3 Hosts:

A-eth0  - eth0-B-eth1 - eth0-C
192.168.0.1/24192.168.0.2/24   172.16.1.1/24 172.16.1.2/24

Host A routing table:
192.168.0.0/24 dev eth0
172.16.1.0/24 via 192.168.0.2

Host B routing table:
192.168.0.0/24 dev eth0
172.16.1.0/24 dev eth1

Host C routing table:
192.168.0.0/24 via 172.16.1.1
172.16.1.0/24 dev eth0

dev = directly connected
via = next-hop, gateway if you prefer

What you could see is that each host have a similar routing table, just
the next-hop changes. Default route is just a way to reduce the routing
table size by removing all entries that have an identical next-hop.


Which brings me to a question: how do we define such routing rules in
lwIP? Hmm...


I'm surprised by the question :-) In lwIP, "dev" rules don't need to be
added, the ip4_route function "create" them dynamically using the
interface address/netmask.


Well, yes, my bad. The question wasn't phrased well. The thing I don't
understand (because I'm not using it) probably all boils down to using
lwIP as a PPP 'proxy' to remote networks without doing NAT at the same
time (which we don't support in mainline). That's not standard routing...



But thanks you for asking that because there is a huge issue about
that with the aforementioned case. Since "dev" rules are not ordered
because we just foreach on interfaces list until a match, we don't
respect that smaller subnets should be checked and matched first. So if
an IP subnet is within the IP subnet of another interface, although
perfectly legal configuration but *bad* design, it does not work in
lwIP. In lwIP it actually depends on the order interfaces were added :-)


Which results in me citing my mantra "lwIP does *not* support multiple
netifs in the same subnet". (And for those who ask why: most of the
time, this is just bad network desing. For the rest where it is
intended: we could make it work, but the burdon on the rest of us not
needing it has been too much, up to now.)



For "via" routes, we have LWIP_HOOK_IP4_ROUTE.


Yeah, well, this is probably not used much, being a hook that people
need to implement on their own? A default implementation for a routing
algorithm woule be nice...

Regards,
Simon

___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

Re: [lwip-users] IP forwarding to/from PPP working for one netif, but not another

2020-01-30 Thread Sylvain Rochet
Hi Simon,

On Thu, Jan 30, 2020 at 09:31:11PM +0100, goldsi...@gmx.de wrote:
> Am 30.01.2020 um 20:42 schrieb Sylvain Rochet:
> > On Wed, Jan 29, 2020 at 08:15:11PM -0800, Andrew Pullin wrote:
> > > 
> > > Host2:
> > >     - Micontroller device, ESP32
> > >     - has both WiFi and Ethernet PHY hardware (IP101GRI Ethernet PHY), 
> > > used
> > >mutually exclusively
> > >     - Running lwIP
> > >     - WiFi and Ethernet are independently verified to work to reach WAN 
> > > from
> > >this host
> > >     - PPPoS server
> > >     - ppp0 : 10.0.0.1/32
> > >         - IP for server and client are hard-coded in
> > >         - I believe it is /32, as the netmask is reported as 
> > > 255.255.255.255
> > >     - When running w/ WiFi:
> > >         - wlan0 : ip 10.0.200.136/16  (IP and /16 from DHCP server)
> > >     - When running w/ Ethernet:
> > >         - eth0 : ip 10.0.200.113/16  (IP and /16 from DHCP server)
> 
> One odd thing I find here is that lwIP does not support 2 interfaces in
> the same subnet. So you would have to take care that only one netif at a
> time has its link set up (or its address set or its administrative
> status up, or whatever). In any case, having both wlan0 and eth0 up and
> running with an address in the same subnet will result in packets being
> accepted on both netifs but transmitted on whichever was registered last
> (or was it first?).

I assumed that both were not active at the same time, good catch, this 
might be an issue as well.


> > This is not "connection sharing", this is IP routing, not NAT !,
> > "connection sharing" is usually used for hosts that do SNAT on their
> > Interface facing Internet.
> >
> > IP routing needs a complete routing table on all hosts telling how to
> > reach (i.e. which next-hop to use) every host of the whole network.
> >
> > Example with 2 subnets and 3 Hosts:
> >
> > A-eth0  - eth0-B-eth1 - eth0-C
> >192.168.0.1/24192.168.0.2/24   172.16.1.1/24 172.16.1.2/24
> >
> > Host A routing table:
> > 192.168.0.0/24 dev eth0
> > 172.16.1.0/24 via 192.168.0.2
> >
> > Host B routing table:
> > 192.168.0.0/24 dev eth0
> > 172.16.1.0/24 dev eth1
> >
> > Host C routing table:
> > 192.168.0.0/24 via 172.16.1.1
> > 172.16.1.0/24 dev eth0
> >
> > dev = directly connected
> > via = next-hop, gateway if you prefer
> >
> > What you could see is that each host have a similar routing table, just
> > the next-hop changes. Default route is just a way to reduce the routing
> > table size by removing all entries that have an identical next-hop.
> 
> Which brings me to a question: how do we define such routing rules in
> lwIP? Hmm...

I'm surprised by the question :-) In lwIP, "dev" rules don't need to be 
added, the ip4_route function "create" them dynamically using the 
interface address/netmask.

But thanks you for asking that because there is a huge issue about 
that with the aforementioned case. Since "dev" rules are not ordered 
because we just foreach on interfaces list until a match, we don't 
respect that smaller subnets should be checked and matched first. So if 
an IP subnet is within the IP subnet of another interface, although 
perfectly legal configuration but *bad* design, it does not work in 
lwIP. In lwIP it actually depends on the order interfaces were added :-)

For "via" routes, we have LWIP_HOOK_IP4_ROUTE.

Sylvain


signature.asc
Description: Digital signature
___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

Re: [lwip-users] IP forwarding to/from PPP working for one netif, but not another

2020-01-30 Thread goldsi...@gmx.de

Am 30.01.2020 um 20:42 schrieb Sylvain Rochet:

Hi Andrew,

On Wed, Jan 29, 2020 at 08:15:11PM -0800, Andrew Pullin wrote:


Uh-oh, I think I did a poor job of explaining it. Although you seem to have
surmised most of it.

The full rundown:

Host1:
     - Micontroller device with no MAC or PHY
     - running NetX IP stack
     - Runs a PPP client, specifically PPPoS using TTL UART
     - default route: ppp0
     - ppp0 is the only network interface available
     - ARP is supported and enabled
     - IP 10.0.0.2 is assigned during PPP negotiation


There are no ARP in PPP, but whatever, this configuration is correct.



Host2:
     - Micontroller device, ESP32
     - has both WiFi and Ethernet PHY hardware (IP101GRI Ethernet PHY), used
mutually exclusively
     - Running lwIP
     - WiFi and Ethernet are independently verified to work to reach WAN from
this host
     - PPPoS server
     - ppp0 : 10.0.0.1/32
         - IP for server and client are hard-coded in
         - I believe it is /32, as the netmask is reported as 255.255.255.255
     - When running w/ WiFi:
         - wlan0 : ip 10.0.200.136/16  (IP and /16 from DHCP server)
     - When running w/ Ethernet:
         - eth0 : ip 10.0.200.113/16  (IP and /16 from DHCP server)


One odd thing I find here is that lwIP does not support 2 interfaces in
the same subnet. So you would have to take care that only one netif at a
time has its link set up (or its address set or its administrative
status up, or whatever). In any case, having both wlan0 and eth0 up and
running with an address in the same subnet will result in packets being
accepted on both netifs but transmitted on whichever was registered last
(or was it first?).


     - Routing is unknown. lwIP built with IP_FORWARD enabled.
     - default route: wlan0 or eth0 (assumed)
     - ARP is enabled.


10.0.0.1/32 and 10.0.0.2/32 are within 10.0.0.0/16 subnet, that
shouldn't be a problem here, this is usually a bad practice and it
should be avoided. This is a problem for hosts on 10.0.0.0/16 that don't
know there is a hole in the subnet, since there are only 3 hosts here,
which is an expection rather than the rule, it is safe by luck.



WiFi AP's:
     - AP only (no routing)
     - Connected to Host3 by Ethernet
     - MACs 0c:8d:db:6e:f0:03 or 0c:8d:db:6e:f0:88 (can't control
association)

Host3:
     - Router (pfSense)
     - DHCP server runs here
     - Routes to WAN, does NAT, eth0 <-> eth1
     - default route: set by DHCP, toward eth1
     - no other route (as far as I know)
     - Intranet WiFi AP's are connected via switch to eth0
     - Intranet Ethernet devices are connected via switch to eth0
     - eth0 : 10.0.1.1/16 , facing intranet, MAC 00:e0:67:18:54:95
     - eth1 : IP from ISP, facing public IPv4 internet, MAC 00:e0:67:18:54:94


Here is the real problem, you need a route on Host3 telling that
10.0.0.2/32 is behind 10.0.200.136 (or 10.0.200.113). You can also add a
route for 10.0.0.1/32 but it's just a bonus.

Without this route, Host3 don't know how to route the packet and will
try to find an host on the 10.0.0.0/16 subnet using ARP. Then it's just
luck, and depends on what Host3 and Host2 are doing:

- If the packet is sent in a broadcast Ethernet frame by Host3 it might
works if Host2 catches the packet and forwards it to Host1.

- If the ARP request gets answered by Host2 when Host3 send their ARP
request to find who is 10.0.0.2 on the 10.0.0.0/16 subnet, then it also
works. This is known as ARP Proxy, lwIP does not support that.

It's just luck, using lazy features of IP stack to make it works even if
the configuration is broken should be avoided :-)



Layout:

Host1 <-> Host2 <-> Host3
<-> public internet
     PPPoS                     Ethernet

or

Host1 <-> Host2 <>  WiFi AP
<--> Host3 <---> public internet
     PPPoS WiFi      Ethernet


For the case of using the WiFi connection, there are separate WiFi AP's in
the way.
Other than that, the two cases are host2 connecting to the local subnet via
wlan0 or connecting via eth0.


I guess the only reason it works with WiFi and not with Ethernet is
because WiFi is intrinsically broadcast-based while Ethernet is switched
(well, I hope so, unless you live in '90s :p). This is the "works
because Host2 catches the broadcast packet" case I've said before.



I am not manually adding any static routes in either Host1 or Host2.
I was worried that Host2 would not be able to accomplish the "connection
sharing" until I found the IP_FORWARDING option. That initially worked with
Host2 using WiFi without any manually added static routes.


This is not "connection sharing", this is IP routing, not NAT !,
"connection sharing" is usually used for hosts that do SNAT on their
Interface facing Internet.

IP routing needs a complete routing table on all hosts telling how to
reach (i.e. which 

Re: [lwip-users] IP forwarding to/from PPP working for one netif, but not another

2020-01-30 Thread Sylvain Rochet
Hi Andrew,

On Wed, Jan 29, 2020 at 08:15:11PM -0800, Andrew Pullin wrote:
> 
> Uh-oh, I think I did a poor job of explaining it. Although you seem to have
> surmised most of it.
> 
> The full rundown:
> 
> Host1:
>     - Micontroller device with no MAC or PHY
>     - running NetX IP stack
>     - Runs a PPP client, specifically PPPoS using TTL UART
>     - default route: ppp0
>     - ppp0 is the only network interface available
>     - ARP is supported and enabled
>     - IP 10.0.0.2 is assigned during PPP negotiation

There are no ARP in PPP, but whatever, this configuration is correct.


> Host2:
>     - Micontroller device, ESP32
>     - has both WiFi and Ethernet PHY hardware (IP101GRI Ethernet PHY), used
> mutually exclusively
>     - Running lwIP
>     - WiFi and Ethernet are independently verified to work to reach WAN from
> this host
>     - PPPoS server
>     - ppp0 : 10.0.0.1/32
>         - IP for server and client are hard-coded in
>         - I believe it is /32, as the netmask is reported as 255.255.255.255
>     - When running w/ WiFi:
>         - wlan0 : ip 10.0.200.136/16  (IP and /16 from DHCP server)
>     - When running w/ Ethernet:
>         - eth0 : ip 10.0.200.113/16  (IP and /16 from DHCP server)
>     - Routing is unknown. lwIP built with IP_FORWARD enabled.
>     - default route: wlan0 or eth0 (assumed)
>     - ARP is enabled.

10.0.0.1/32 and 10.0.0.2/32 are within 10.0.0.0/16 subnet, that 
shouldn't be a problem here, this is usually a bad practice and it 
should be avoided. This is a problem for hosts on 10.0.0.0/16 that don't 
know there is a hole in the subnet, since there are only 3 hosts here, 
which is an expection rather than the rule, it is safe by luck.


> WiFi AP's:
>     - AP only (no routing)
>     - Connected to Host3 by Ethernet
>     - MACs 0c:8d:db:6e:f0:03 or 0c:8d:db:6e:f0:88 (can't control
> association)
> 
> Host3:
>     - Router (pfSense)
>     - DHCP server runs here
>     - Routes to WAN, does NAT, eth0 <-> eth1
>     - default route: set by DHCP, toward eth1
>     - no other route (as far as I know)
>     - Intranet WiFi AP's are connected via switch to eth0
>     - Intranet Ethernet devices are connected via switch to eth0
>     - eth0 : 10.0.1.1/16 , facing intranet, MAC 00:e0:67:18:54:95
>     - eth1 : IP from ISP, facing public IPv4 internet, MAC 00:e0:67:18:54:94

Here is the real problem, you need a route on Host3 telling that 
10.0.0.2/32 is behind 10.0.200.136 (or 10.0.200.113). You can also add a 
route for 10.0.0.1/32 but it's just a bonus.

Without this route, Host3 don't know how to route the packet and will 
try to find an host on the 10.0.0.0/16 subnet using ARP. Then it's just 
luck, and depends on what Host3 and Host2 are doing:

- If the packet is sent in a broadcast Ethernet frame by Host3 it might 
works if Host2 catches the packet and forwards it to Host1.

- If the ARP request gets answered by Host2 when Host3 send their ARP 
request to find who is 10.0.0.2 on the 10.0.0.0/16 subnet, then it also 
works. This is known as ARP Proxy, lwIP does not support that.

It's just luck, using lazy features of IP stack to make it works even if 
the configuration is broken should be avoided :-)


> Layout:
> 
> Host1 <-> Host2 <-> Host3
> <-> public internet
>     PPPoS                     Ethernet
> 
> or
> 
> Host1 <-> Host2 <>  WiFi AP
> <--> Host3 <---> public internet
>     PPPoS WiFi      Ethernet
> 
> 
> For the case of using the WiFi connection, there are separate WiFi AP's in
> the way.
> Other than that, the two cases are host2 connecting to the local subnet via
> wlan0 or connecting via eth0.

I guess the only reason it works with WiFi and not with Ethernet is 
because WiFi is intrinsically broadcast-based while Ethernet is switched 
(well, I hope so, unless you live in '90s :p). This is the "works 
because Host2 catches the broadcast packet" case I've said before.


> I am not manually adding any static routes in either Host1 or Host2.
> I was worried that Host2 would not be able to accomplish the "connection
> sharing" until I found the IP_FORWARDING option. That initially worked with
> Host2 using WiFi without any manually added static routes.

This is not "connection sharing", this is IP routing, not NAT !, 
"connection sharing" is usually used for hosts that do SNAT on their 
Interface facing Internet.

IP routing needs a complete routing table on all hosts telling how to 
reach (i.e. which next-hop to use) every host of the whole network.

Example with 2 subnets and 3 Hosts:

A-eth0  - eth0-B-eth1 - eth0-C
  192.168.0.1/24192.168.0.2/24   172.16.1.1/24 172.16.1.2/24

Host A routing table:
192.168.0.0/24 dev eth0
172.16.1.0/24 via 192.168.0.2

Host B routing table:
192.168.0.0/24 dev eth0
172.16.1.0/24 dev eth1

Host C routing 

Re: [lwip-users] IP forwarding to/from PPP working for one netif, but not another

2020-01-30 Thread Jens Nielsen

Hi,

On 2020-01-30 05:15, Andrew Pullin wrote:

On 1/29/20 5:42 AM, Sylvain Rochet wrote:

Hi Andrew,

On Tue, Jan 28, 2020 at 04:57:19PM -0800, Andrew Pullin wrote:

Hi folks,

I am stuck on an issue here where I am trying to use lwip's 
IP_FORWARDING

feature.
I am trying to forward packets between a PPP server netif and a WAN
interface. It is working on case, where the WAN-connected device is 
using

WiFi, but then it fails to work in another case where the WAN device is
configured to use an Ethernet interface.

This is to ultimately bring Ethernet connectivity to a device without
Ethernet, but which can act as a PPP client (via UART).
Lwip is running on a device with Ethernet and using the lwip PPP server
implementation.

I have read the other threads involving PPP and forwarding, but I don't
believe I have seen quite this same problem arise.

Here is how the devices are arranged for each case:

Working:
    10.0.0.2 --[UART]--> 10.0.0.1 -->
10.0.200.121 --> 10.0.1.1 ---> WAN
(PPP client)    (PPP server, ESP32, lwip) (WiFi STA 
netif)

              ( router )

In this case, the WiFi netif reports the gateway IP correctly 
(10.0.1.1) and

the netmask as 255.255.0.0

Not working:
    10.0.0.2 --[UART]--> 10.0.0.1 -->
10.0.200.113 --> 10.0.1.1 ---> WAN
(PPP client)               (PPP server, ESP32, lwip)
(Ethernet netif)               ( router )

In this case, the Ethernet netif reports the gateway IP correctly 
(10.0.1.1)
and the netmask as 255.255.0.0 , which appears to be the same as for 
the

working WiFi netif case.

The addresses 10.0.0.1 and 10.0.0.2 on each side of the PPP are 
manually
configured. They are hardcoded into the PPP server setup, and the 
client

appears to be able to take it's 10.0.0.2 address via IPCP over PPP.


To test that the WAN connection "works" for the PPP client, I am 
issuing

pings from PPP client device.
In the "working" case, I can ping 10.0.0.1, 10.0.1.1 (network 
gateway), and

8.8.8.8. All work.
In the "not working" case on ethernet, I can ping 10.0.0.1 (just 
over the

PPP link), but 10.0.1.1 and 8.8.8.8 appear unreachable.

Of course, I am building with IP_FORWARD defined to 1. Debug logs do 
reflect

that forwarding is happening.
There are several shims in the Espressif SDK over the actual lwip netif
sets/calls.
As far as I can see, the same setup is done for the ethernet netif 
as is for

the wifi netif, but this is an obviously suspicious point.

In my case, I am using an ESP32 chip, and all of the lwip init and 
setup is

done for me in the SDK.
As far as I can see, the init for each adapter/netif type looks the 
same.


I have logs for each case, too:
Working (wifi netif) - https://pastebin.com/RgqHa5CR
Not working (ethernet netif) - https://pastebin.com/L80raiRF

One note here is: the PPP client is not running lwip. For hardware & 
legacy
reasons, it is running another network stack with a totally 
different PPP

client implementation.
But, given that the working/not working is a function of the PPP server
netif's, I did not suspect a mis-configuration issue in the PPP client.

Any insight here would be greatly appreciated. I am not too familiar 
with

the deep under-the-hood details of network stacks.

I tried to understand but I failed. Before anything else, could you
share the real network configuration of all network interfaces, the
routing table on all hosts, and any speciafic features enabled on each
interface (NAT, ARP-Proxy, …), for all configurations you tried ?

Example:

[Host1]ppp0 --- ppp0[Host2]eth0 --- eth0[Host3]eth1 --- Internet

Host1:
   running a PPP client, that's all we know
   ppp0: 10.0.0.2/32
   default route: ppp0
   no other route

Host2:
   running lwIP
   ppp0: 10.0.0.1/32
   eth0: 10.0.200.121/16
   default route: 10.0.1.1
   no other route

Host3:
   gateway ? to what ?
   eth0: 10.0.1.1/16
   eth1: public IPv4, facing Internet, set by DHCP, SNAT
   default route: set by DHCP, toward eth1
   no other route

Hint: the configuration above can't work, but I'm not sure this is what
you currently have...

Sylvain
Uh-oh, I think I did a poor job of explaining it. Although you seem to 
have surmised most of it.


The full rundown:

Host1:
    - Micontroller device with no MAC or PHY
    - running NetX IP stack
    - Runs a PPP client, specifically PPPoS using TTL UART
    - default route: ppp0
    - ppp0 is the only network interface available
    - ARP is supported and enabled
    - IP 10.0.0.2 is assigned during PPP negotiation

Host2:
    - Micontroller device, ESP32
    - has both WiFi and Ethernet PHY hardware (IP101GRI Ethernet PHY), 
used mutually exclusively

    - Running lwIP
    - WiFi and Ethernet are independently verified to work to reach 
WAN from this host

    - PPPoS server
    - ppp0 : 10.0.0.1/32
        - IP for server and client are hard-coded in
        - I believe it is /32, as the netmask is reported as 

Re: [lwip-users] IP forwarding to/from PPP working for one netif, but not another

2020-01-29 Thread Andrew Pullin

On 1/29/20 5:42 AM, Sylvain Rochet wrote:

Hi Andrew,

On Tue, Jan 28, 2020 at 04:57:19PM -0800, Andrew Pullin wrote:

Hi folks,

I am stuck on an issue here where I am trying to use lwip's IP_FORWARDING
feature.
I am trying to forward packets between a PPP server netif and a WAN
interface. It is working on case, where the WAN-connected device is using
WiFi, but then it fails to work in another case where the WAN device is
configured to use an Ethernet interface.

This is to ultimately bring Ethernet connectivity to a device without
Ethernet, but which can act as a PPP client (via UART).
Lwip is running on a device with Ethernet and using the lwip PPP server
implementation.

I have read the other threads involving PPP and forwarding, but I don't
believe I have seen quite this same problem arise.

Here is how the devices are arranged for each case:

Working:
    10.0.0.2 --[UART]--> 10.0.0.1 -->
10.0.200.121 --> 10.0.1.1 ---> WAN
(PPP client)    (PPP server, ESP32, lwip) (WiFi STA netif)
              ( router )

In this case, the WiFi netif reports the gateway IP correctly (10.0.1.1) and
the netmask as 255.255.0.0

Not working:
    10.0.0.2 --[UART]--> 10.0.0.1 -->
10.0.200.113 --> 10.0.1.1 ---> WAN
(PPP client)               (PPP server, ESP32, lwip)
(Ethernet netif)               ( router )

In this case, the Ethernet netif reports the gateway IP correctly (10.0.1.1)
and the netmask as 255.255.0.0 , which appears to be the same as for the
working WiFi netif case.

The addresses 10.0.0.1 and 10.0.0.2 on each side of the PPP are manually
configured. They are hardcoded into the PPP server setup, and the client
appears to be able to take it's 10.0.0.2 address via IPCP over PPP.


To test that the WAN connection "works" for the PPP client, I am issuing
pings from PPP client device.
In the "working" case, I can ping 10.0.0.1, 10.0.1.1 (network gateway), and
8.8.8.8. All work.
In the "not working" case on ethernet, I can ping 10.0.0.1 (just over the
PPP link), but 10.0.1.1 and 8.8.8.8 appear unreachable.

Of course, I am building with IP_FORWARD defined to 1. Debug logs do reflect
that forwarding is happening.
There are several shims in the Espressif SDK over the actual lwip netif
sets/calls.
As far as I can see, the same setup is done for the ethernet netif as is for
the wifi netif, but this is an obviously suspicious point.

In my case, I am using an ESP32 chip, and all of the lwip init and setup is
done for me in the SDK.
As far as I can see, the init for each adapter/netif type looks the same.

I have logs for each case, too:
Working (wifi netif) - https://pastebin.com/RgqHa5CR
Not working (ethernet netif) - https://pastebin.com/L80raiRF

One note here is: the PPP client is not running lwip. For hardware & legacy
reasons, it is running another network stack with a totally different PPP
client implementation.
But, given that the working/not working is a function of the PPP server
netif's, I did not suspect a mis-configuration issue in the PPP client.

Any insight here would be greatly appreciated. I am not too familiar with
the deep under-the-hood details of network stacks.

I tried to understand but I failed. Before anything else, could you
share the real network configuration of all network interfaces, the
routing table on all hosts, and any speciafic features enabled on each
interface (NAT, ARP-Proxy, …), for all configurations you tried ?

Example:

[Host1]ppp0 --- ppp0[Host2]eth0 --- eth0[Host3]eth1 --- Internet

Host1:
   running a PPP client, that's all we know
   ppp0: 10.0.0.2/32
   default route: ppp0
   no other route

Host2:
   running lwIP
   ppp0: 10.0.0.1/32
   eth0: 10.0.200.121/16
   default route: 10.0.1.1
   no other route

Host3:
   gateway ? to what ?
   eth0: 10.0.1.1/16
   eth1: public IPv4, facing Internet, set by DHCP, SNAT
   default route: set by DHCP, toward eth1
   no other route

Hint: the configuration above can't work, but I'm not sure this is what
you currently have...

Sylvain
Uh-oh, I think I did a poor job of explaining it. Although you seem to 
have surmised most of it.


The full rundown:

Host1:
    - Micontroller device with no MAC or PHY
    - running NetX IP stack
    - Runs a PPP client, specifically PPPoS using TTL UART
    - default route: ppp0
    - ppp0 is the only network interface available
    - ARP is supported and enabled
    - IP 10.0.0.2 is assigned during PPP negotiation

Host2:
    - Micontroller device, ESP32
    - has both WiFi and Ethernet PHY hardware (IP101GRI Ethernet PHY), 
used mutually exclusively

    - Running lwIP
    - WiFi and Ethernet are independently verified to work to reach WAN 
from this host

    - PPPoS server
    - ppp0 : 10.0.0.1/32
        - IP for server and client are hard-coded in
        - I believe it is /32, as the netmask is reported as 
255.255.255.255

    - When running w/ WiFi:
        - wlan0 : ip 10.0.200.136/16  (IP and 

Re: [lwip-users] IP forwarding to/from PPP working for one netif, but not another

2020-01-29 Thread Sylvain Rochet
Hi Andrew,

On Tue, Jan 28, 2020 at 04:57:19PM -0800, Andrew Pullin wrote:
> Hi folks,
> 
> I am stuck on an issue here where I am trying to use lwip's IP_FORWARDING
> feature.
> I am trying to forward packets between a PPP server netif and a WAN
> interface. It is working on case, where the WAN-connected device is using
> WiFi, but then it fails to work in another case where the WAN device is
> configured to use an Ethernet interface.
> 
> This is to ultimately bring Ethernet connectivity to a device without
> Ethernet, but which can act as a PPP client (via UART).
> Lwip is running on a device with Ethernet and using the lwip PPP server
> implementation.
> 
> I have read the other threads involving PPP and forwarding, but I don't
> believe I have seen quite this same problem arise.
> 
> Here is how the devices are arranged for each case:
> 
> Working:
>    10.0.0.2 --[UART]--> 10.0.0.1 --> 
> 10.0.200.121 --> 10.0.1.1 ---> WAN
> (PPP client)    (PPP server, ESP32, lwip) (WiFi STA netif) 
>              ( router )
> 
> In this case, the WiFi netif reports the gateway IP correctly (10.0.1.1) and
> the netmask as 255.255.0.0
> 
> Not working:
>    10.0.0.2 --[UART]--> 10.0.0.1 --> 
> 10.0.200.113 --> 10.0.1.1 ---> WAN
> (PPP client)               (PPP server, ESP32, lwip)   
> (Ethernet netif)               ( router )
> 
> In this case, the Ethernet netif reports the gateway IP correctly (10.0.1.1)
> and the netmask as 255.255.0.0 , which appears to be the same as for the
> working WiFi netif case.
> 
> The addresses 10.0.0.1 and 10.0.0.2 on each side of the PPP are manually
> configured. They are hardcoded into the PPP server setup, and the client
> appears to be able to take it's 10.0.0.2 address via IPCP over PPP.
> 
> 
> To test that the WAN connection "works" for the PPP client, I am issuing
> pings from PPP client device.
> In the "working" case, I can ping 10.0.0.1, 10.0.1.1 (network gateway), and
> 8.8.8.8. All work.
> In the "not working" case on ethernet, I can ping 10.0.0.1 (just over the
> PPP link), but 10.0.1.1 and 8.8.8.8 appear unreachable.
> 
> Of course, I am building with IP_FORWARD defined to 1. Debug logs do reflect
> that forwarding is happening.
> There are several shims in the Espressif SDK over the actual lwip netif
> sets/calls.
> As far as I can see, the same setup is done for the ethernet netif as is for
> the wifi netif, but this is an obviously suspicious point.
> 
> In my case, I am using an ESP32 chip, and all of the lwip init and setup is
> done for me in the SDK.
> As far as I can see, the init for each adapter/netif type looks the same.
> 
> I have logs for each case, too:
> Working (wifi netif) - https://pastebin.com/RgqHa5CR
> Not working (ethernet netif) - https://pastebin.com/L80raiRF
> 
> One note here is: the PPP client is not running lwip. For hardware & legacy
> reasons, it is running another network stack with a totally different PPP
> client implementation.
> But, given that the working/not working is a function of the PPP server
> netif's, I did not suspect a mis-configuration issue in the PPP client.
> 
> Any insight here would be greatly appreciated. I am not too familiar with
> the deep under-the-hood details of network stacks.

I tried to understand but I failed. Before anything else, could you 
share the real network configuration of all network interfaces, the 
routing table on all hosts, and any speciafic features enabled on each 
interface (NAT, ARP-Proxy, …), for all configurations you tried ?

Example:

[Host1]ppp0 --- ppp0[Host2]eth0 --- eth0[Host3]eth1 --- Internet

Host1:
  running a PPP client, that's all we know
  ppp0: 10.0.0.2/32
  default route: ppp0
  no other route

Host2:
  running lwIP
  ppp0: 10.0.0.1/32
  eth0: 10.0.200.121/16
  default route: 10.0.1.1
  no other route

Host3:
  gateway ? to what ?
  eth0: 10.0.1.1/16
  eth1: public IPv4, facing Internet, set by DHCP, SNAT
  default route: set by DHCP, toward eth1
  no other route

Hint: the configuration above can't work, but I'm not sure this is what 
you currently have...

Sylvain


signature.asc
Description: Digital signature
___
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users