Hey, just a heads up - there is a similar request to yours which came from a different direction. I’ll be making a change which I think will help your situation as well. Stay tuned.
Regards, Klement > On 22 Feb 2021, at 10:00, Юрий Иванов <format_...@outlook.com> wrote: > > Hello Klement, > > Thanks for reply. > Looks like I shold craft this idea by myself ;-) > > The main problem for me - I'm network engeneer for past few years and do not > program much for this time on C, but I try to try craft new patch. > > Thanks in advance. > > От: Klement Sekera -X (ksekera - PANTHEON TECH SRO at Cisco) > <ksek...@cisco.com> > Отправлено: 16 февраля 2021 г. 19:03 > Кому: Юрий Иванов <format_...@outlook.com> > Копия: Filip Varga -X (fivarga - PANTHEON TECH SRO at Cisco) > <fiva...@cisco.com>; vpp-dev@lists.fd.io <vpp-dev@lists.fd.io> > Тема: Re: [vpp-dev] NAT44 how to control external address assignment from > pool? > > I see, so you’re not using deterministic NAT. Which NAT flavour are you using? > > I think what you are requesting is not provided by VPP at this moment, but > looking at the allocation algorithm, it might be possible to implement such > behaviour. It should be relatively straightforward in EI NAT and a little bit > more complicated in ED NAT, requiring an extra hash table for user-outside > address mappings as ED NAT has no “user” tracking. > > Another possibility would be to make it completely random - so for every > connection there would be a random address picked, so e.g. user1 might get > 1.0.0.7 for google.com, but 1.0.0.117 for duckduckgo.com. This would be even > easier to implement. > > Would you like to give it a try and submit a patch? I can provide guidance… > > Regards, > Klement > > > On 16 Feb 2021, at 15:22, Юрий Иванов <format_...@outlook.com> wrote: > > > > Thanks Klement, > > > > I want to use #1 option and try to think about #2 with DUT only as > > workaround. > > > > The simple random allocation (option #1) looks acceptable for me but I have > > several issues with it now. > > > > I have big external pool (out network has /24 mask) I want to use all > > addresses more evenly. > > Now if I set pool with vpp# nat44 add address 1.0.0.3-1.0.0.100 > > > > But with such configuration all clients behind NAT will have external > > address 1.0.0.100 until all ports are used up, next will get 1.0.0.99 until > > all ports are used up etc. > > As the result all users gets google reCAPTCHA on most resources (i.e. > > google.com search) because there are too many users are hiding behind the > > same IP while others addresses in pool are not used at all. > > > > Since the standard Linux box can use option "persistent" which gives a > > client random address from snat pool (on first translation) and preservers > > it until the end of the user session I'm interested how to achieve this > > behavior with VPP. > > > > Can I somehow setup pool 1.0.0.3-1.0.0.200. Then first client 10.0.0.1 will > > have random external address, i.e. 1.0.0.7 (I mean random address from the > > pool) and preserve it for all new connections until the end of the session, > > second client 10.0.0.5 -> next random address etc. > > > > Thanks in advance. > > От: Klement Sekera -X (ksekera - PANTHEON TECH SRO at Cisco) > > <ksek...@cisco.com> > > Отправлено: 16 февраля 2021 г. 14:01 > > Кому: Юрий Иванов <format_...@outlook.com> > > Копия: Filip Varga -X (fivarga - PANTHEON TECH SRO at Cisco) > > <fiva...@cisco.com>; vpp-dev@lists.fd.io <vpp-dev@lists.fd.io> > > Тема: Re: [vpp-dev] NAT44 how to control external address assignment from > > pool? > > > > Hi, let me chime in and explain a bit more. > > > > DET NAT also known as CGNAT (as in carrier-grade NAT) is designed to > > conform to LI (lawful intercept) requirements. > > > > So, if you, as an internet provider are required by law to be able to > > provide a user identification based on outside address + port made by that > > user, you have two options: > > > > 1.) log every connection and keep the logs > > 2.) make it deterministic, so you can always calculate inside address from > > outside address + port > > > > DET NAT is #2 and thus it cannot be random. > > > > For random allocation, you can use either EI or ED NAT. But these of course > > don’t provide any way to calculate user address from outside address. > > > > What is your use case? > > > > Thanks, > > Klement > > > > > On 10 Feb 2021, at 19:14, Юрий Иванов <format_...@outlook.com> wrote: > > > > > > Hi Filip, > > > > > > Thanks, I understand, det44 plugin is working separately but we should > > > manually manage mapping local network to external IP. > > > > > > But in case we try to use standard nut configuration with pools: > > > vpp# nat44 forwarding enable > > > vpp# set int nat44 in GigabitEthernet0/5/0 out GigabitEthernet0/4/0 > > > vpp# nat44 add address 1.0.0.3-1.0.0.100 > > > > > > All clients will have external address 1.0.0.100 until all ports are used > > > up, next will get 1.0.0.99 until all ports are used up etc. > > > This behaviour leads to showing google reCAPTCHA on most resources (i.e. > > > google.com search) because there are too many users are hiding behind the > > > same IP while others addresses in pool are not used at all. > > > I can afford to use pool with 255 addresses (/24 network), but in this > > > case most of addresses will not be used at all (. > > > > > > I'm interested how to tune vpp to select a random address for every new > > > client and leave this same source-/destination-address for each new > > > connection. This should help more even use of the address pool. > > > The same behavior as nftables do with "ip saddr 10.0.0.0/8 oif "vlan10" > > > snat to 1.0.0.3-1.0.0.100 persistent". > > > > > > Thanks in advance. > > > От: Filip Varga -X (fivarga - PANTHEON TECH SRO at Cisco) > > > <fiva...@cisco.com> > > > Отправлено: 10 февраля 2021 г. 14:25 > > > Кому: Юрий Иванов <format_...@outlook.com>; vpp-dev@lists.fd.io > > > <vpp-dev@lists.fd.io> > > > Тема: RE: [vpp-dev] NAT44 how to control external address assignment from > > > pool? > > > > > > Hello, > > > > > > For clarification i will explain how the nat is devided. > > > > > > At this point NAT functionality is devided in multiple sub plugins > > > because of it’s previous complexity and issues with it. > > > We have det44 and nat44 plugins that are completely separate. The whole > > > separation is still in progress. So changes in nat44 like picking up pool > > > allocation algorithm or anything else will not affect det44 plugin. These > > > two plugins operate completely independently and share just some NAT > > > library for common stuff. > > > > > > Regarding the det44 allocation algorithm. No at this point it is not > > > supported to pick up a new randomly selected address as you are asking. > > > Det44 is / should act in predetermined way so logging is not required. > > > > > > I will look further in the code and plugins if i can help you find some > > > solution. > > > > > > Best regards, > > > Filip > > > > > > From: Юрий Иванов <format_...@outlook.com> > > > Sent: Wednesday, February 10, 2021 8:47 AM > > > To: Filip Varga -X (fivarga - PANTHEON TECH SRO at Cisco) > > > <fiva...@cisco.com>; vpp-dev@lists.fd.io > > > Subject: RE: [vpp-dev] NAT44 how to control external address assignment > > > from pool? > > > Importance: High > > > > > > Hi Filip, thanks for reply. > > > > > > This is only for host mapping and looks that it can be done with det44 > > > plugin - very strange btw that it operates separatly from standard nat44 > > > (meaning that I do need to configure nat at all to use it). > > > > > > My problem is different, when I set pool i.e. 1.0.0.1-1.0.0.100 all > > > clients always get the last address from the pool (.100) until external > > > IP run out of ports and only after that client will get .99 IP untile > > > this IP will run out of ports and etc. > > > > > > Is there way to select new random address from pool for new client and > > > after that use this randomly selected same source-/destination-address > > > for each client connection. > > > > > > Now it leads to problems with Google 'Unusual Traffic' Block/Captcha, > > > because it utilizes several IP addresses where most IP from pool leave > > > unused. > > > > > > От: Filip Varga -X (fivarga - PANTHEON TECH SRO at Cisco) > > > <fiva...@cisco.com> > > > Отправлено: 9 февраля 2021 г. 13:54 > > > Кому: Юрий Иванов <format_...@outlook.com>; vpp-dev@lists.fd.io > > > <vpp-dev@lists.fd.io> > > > Тема: RE: [vpp-dev] NAT44 how to control external address assignment from > > > pool? > > > > > > Hi, > > > > > > If you are looking for option to specify exact outside translation > > > address from a specific pool. You should try : > > > > > > nat44 add static mapping ... exact <pool-addr> > > > > > > Also supported by API. > > > This will give you exact address picked from pool. > > > > > > Best regards, > > > Filip Varga > > > > > > From: vpp-dev@lists.fd.io <vpp-dev@lists.fd.io> On Behalf Of ???? ?????? > > > Sent: Monday, February 8, 2021 11:04 AM > > > To: vpp-dev@lists.fd.io > > > Subject: Re: [vpp-dev] NAT44 how to control external address assignment > > > from pool? > > > Importance: High > > > > > > Just an update, to perform manual translation we should do: > > > > > > det44 plugin enable > > > det44 add in 10.0.1.0/29 out 1.0.0.7/32 > > > det44 add in 10.0.1.16/29 out 1.0.0.5/32 > > > ... > > > set interface det44 inside GigabitEthernet0/5/0 outside > > > GigabitEthernet0/4/0 > > > > > > Ignoring specific nat configuration. > > > > > > Nevertheless, maybe there is some option to select different IP addres > > > from pool? > > > От: vpp-dev@lists.fd.io <vpp-dev@lists.fd.io> от имени Юрий Иванов > > > <format_...@outlook.com> > > > Отправлено: 7 февраля 2021 г. 12:10 > > > Кому: vpp-dev@lists.fd.io <vpp-dev@lists.fd.io> > > > Тема: [vpp-dev] NAT44 how to control external address assignment from > > > pool? > > > > > > Hi, > > > > > > I've got basic nat setup in a lab which works as expected except extarnat > > > IP address allocation. > > > > > > My clients, behind NAT, has addresses: > > > vpp# show ip neighbors > > > Time IP Flags Ethernet > > > Interface > > > 1421.5929 10.0.1.30 D > > > 00:50:79:66:68:00 GigabitEthernet0/5/0 > > > 1424.3609 10.0.1.55 D > > > 00:50:79:66:68:02 GigabitEthernet0/5/0 > > > 1423.1650 10.0.1.41 D > > > 00:50:79:66:68:01 GigabitEthernet0/5/0 > > > 1389.2929 10.0.1.20 D > > > 00:50:79:66:68:04 GigabitEthernet0/5/0 > > > 1377.1449 10.0.1.2 D > > > 00:50:79:66:68:03 GigabitEthernet0/5/0 > > > > > > All can reach external 1.0.0.2 IP which looks good, but for all client > > > external address is 1.0.0.100 (the last IP in a range). > > > I think it will be more better to randomly select different address in > > > range like nftables do with this configuration stranza: > > > "ip saddr 10.0.0.0/8 oif "vlan2" snat to 1.0.0.2-1.0.0.100 persistent" > > > > > > After changing > > > vpp# nat addr-port-assignment-alg map-e psid 10 psid-offset 6 psid-len 6 > > > the only difference that external address become 1.0.0.1 for all clients. > > > > > > I of cource can map host to external address with: > > > vpp# nat44 add static mapping local 10.0.1.2 external 1.0.0.10 > > > But with 30 thousands clients it will very strange idea to map every host > > > route manually. > > > > > > > > >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#18787): https://lists.fd.io/g/vpp-dev/message/18787 Mute This Topic: https://lists.fd.io/mt/80449794/21656 Group Owner: vpp-dev+ow...@lists.fd.io Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-