思科ASA NAT – 内部主机看到它的公共IP

我有一个服务器托pipe的服务器使用思科ASA来做NAT。 我遇到的问题是,使用公共IP的内部服务器会将其公有IP作为源IP。 这基本上打破了一个应用程序,将尝试绑定到外部IP由于某种原因。

提供商不会透露在ASA上的configuration,我问是否有人可以解释这是什么东西,我可以问供应商做什么 – 在这一点上,他们说这一切都为他们工作…

谢谢!

您的主机是否使用DNS名称? 如果是这样,请要求在您的主机的Cisco ASA NAT规则上启用DNS重写 。

应用程序是否允许手动覆盖绑定的位置? 我认为这已经被排除了。

/ etc / hosts中列出了外部IP吗?

从这里,我要带着这个答案走出去,专注于应用程序,而不是nat。 特别是,我将探索你可以在应用程序之外做什么来欺骗它。 这只会是绝望的。 这将假定一个Linux操作系统。

首先,应用程序必须以某种方式从外部获取IP地址。 这将最终成为文件访问(/ sys / …),C库调用或外部可执行文件(/ sbin / ifconfig)。 我们可以试着找出它是如何通过strace获得这些信息的。

strace -f /path/to/app 

输出将是非常详细和技术性的,但可以帮助您确定应用程序使用的机制来确定IP。

下面是一个“hostname -i”的例子,它parsing了我的桌面机器的主IP:

 strace hostname -i execve("/bin/hostname", ["hostname", "-i"], [/* 69 vars */]) = 0 ... socket(PF_NETLINK, SOCK_RAW, 0) = 3 bind(3, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0 getsockname(3, {sa_family=AF_NETLINK, pid=17272, groups=00000000}, [12]) = 0 ... connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory) ... open("/etc/nsswitch.conf", O_RDONLY) = 3 ... open("/etc/host.conf", O_RDONLY) = 3 ... open("/etc/resolv.conf", O_RDONLY) = 3 ... open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 3 read(3, "127.0.0.1\tlocalhost\n192.168.1.4\t"..., 4096) = 338 close(3) = 0 ... write(1, "192.168.1.4\n", 12192.168.1.4 

我们可以看到它尝试了几种技术,然后在/ etc / hosts文件中find匹配项。

现在,欺骗它的方法是:

1)如果应用程序从/ sys读取,那么有点难以捉摸手工制作的chroot环境。

2)如果应用程序进行C库调用,则可以使用应用程序加载自定义共享库来覆盖和更改相应库调用的行为。 无关,我已经使用这个技巧来临时禁用正常操作下需要的应用程序的“fsync”调用。

3)如果应用程序调用可执行文件(/ sbin / ifconfig?),则可以用可select性地改变其应用程序行为的版本replace此可执行文件。 考虑只为应用程序设置一个环境variables并检查自定义可执行文件。

这可能是脱节的话题,并不是真正具体的,但我只是想分享一个高层次的想法,当所有其他选项已经耗尽,你只需要“使其工作”,你可以欺骗一个应用程序。

好的,我gotchya。 一般来说,我对NAT路由器也有同样的抱怨。 当你无法从内部连接到外部的观点时,这是令人沮丧的。 很多路由器都是这种情况。

您可以通过在Linux iptables中使用NAT来解决此问题,以尝试通过连接到内部IP来连接到外部IP。 应用程序甚至不知道它的连接目的地已被改变。 出于所有目的,它会认为它已经连接到外面。

这将是这样的:

 /sbin/iptables -t nat -A OUTPUT \ -p tcp \ -d $EXTERNAL_IP \ --dport $EXTERNAL_PORT \ -j DNAT --to-destination $INTERNAL_IP:$INTERNAL_PORT 

您可以根据自己的需要进行select,即使只对特定用户使用“-m owner!–uid-owner 0”types的匹配进行此NAT。