From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kostas Peletidis Subject: Creating FOU tunnels to the same destination IP but different port Date: Fri, 13 Apr 2018 17:57:03 +0100 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" To: netdev@vger.kernel.org Return-path: Received: from mail-io0-f175.google.com ([209.85.223.175]:39963 "EHLO mail-io0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751489AbeDMQ5Y (ORCPT ); Fri, 13 Apr 2018 12:57:24 -0400 Received: by mail-io0-f175.google.com with SMTP id t123so3781465iof.7 for ; Fri, 13 Apr 2018 09:57:24 -0700 (PDT) Sender: netdev-owner@vger.kernel.org List-ID: Hello, I am having trouble with a particular case of setting up a fou tunnel and I would really appreciate your help. I have a remote multihomed host behind a NAT box and I want to create a fou tunnel for each of its IP addresses, from my machine. A typical case would be something like that (output from the local machine): # ip tun ipudp09602: ip/ip remote 135.196.22.100 local 172.31.0.140 ttl 225 ipudp00101: ip/ip remote 148.252.129.30 local 172.31.0.140 ttl 225 ipudp09604: ip/ip remote 77.247.11.249 local 172.31.0.140 ttl 225 tunl0: any/ip remote any local any ttl inherit nopmtudisc ipudp00102: ip/ip remote 213.205.194.18 local 172.31.0.140 ttl 225 However, if the remote end has the same IP address with the remote end of an existing tunnel (but a different remote port) tunnel creation fails. In this example there is already a tunnel to 135.196.22.100:32270 and I wanted to create a new tunnel to 135.196.22.100:24822 as below: # ip link add name ipudp09603 mtu 1356 type ipip \ remote 135.196.22.100 \ local 172.31.0.140 \ ttl 225 \ encap fou \ encap-sport 4500 \ encap-dport 24822 RTNETLINK answers: File exists The remote IP addresses in this case are identical because there is a NAT box in the way, but the port numbers are different. The source address and port are the same in all cases. I noticed that ip_tunnel_find() does not check port numbers - being IP and all - so I am thinking that a not-so-elegant way to do it is to get the port numbers from the netlink request and have ip_tunnel_find() compare them against encap.{sport, dport} of existing tunnels. Is there a better way to create a second fou tunnel to the same IP address but a different port? Use of keys as unique tunnel IDs maybe? Any feedback is appreciated. Thank you. Regards, Kostas