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 (#18756): https://lists.fd.io/g/vpp-dev/message/18756
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]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to