我在我的路由器上使用OpenWRT(基于Linux)。 路由器有一个本地IP和一个公共IP。 我有一个dyndns名称分配给公共IP。 路由器转发几个端口(例如SSH和HTTPS)到我的本地服务器。
目标:使用相同的URL访问服务器,而不pipe客户端是在本地networking内部还是外部。
从外部:当我发送请求到公共IP。 请求被转发到我的内部服务器。 一切安好
从内部:当我发送一个请求到公共IP时,它在路由器的内部接口上结束。 因此端口转发不起作用。
从内部使用nmap扫描路由器的本地IP时,从内部获得与公共IP相同的结果。 因此,当我从内部访问公共IP时,stream量仍然以本地IP结束。
我能做些什么来访问我的本地networking内外相同的url的服务器?
编辑:
最简单的做法是设置一个内部DNS服务器,将您的站点的主机名parsing为内部IP地址。
或者,您可以在客户端计算机上input/ etc / hosts条目(或等效条目)并获得相同的结果。
您需要使用名称parsing来从networking内外进行不同的工作。 您的dyndns条目将路由到外部IP。 防火墙路由不同于路由内外。
将您的服务器IP地址的dyndns名称添加到OpenWrt上的本地主机文件中,并且dnsmasq DNS服务应该覆盖来自Internet的条目。 如果你configuration正确,你的名字应该从你的networking内部parsing到你的服务器的IP地址,并从networking外部parsing你的外部IP地址。
可以configuration发夹NAT,但是比较困难和脆弱。
你可以在绑定中使用“视图”
acl "local_net" { 192.168.0.0/16; }; view "internal" in { match-clients { local_net; }; recursion yes; additional-from-auth yes; additional-from-cache yes; zone "example.net" in { type master; allow-query { local_net; }; allow-transfer { none; }; allow-update { none; }; file "master/example.net"; }; ... } master/example.net @ IN SOA ns.example.net. root.example.net. ( 2013072101 ; Serial 3600 ; Refresh 900 ; Retry 3600000 ; Expire 3600 ) ; Minimum @ IN A 192.168.127.1 www IN CNAME example.net.
有了这样的设置,你所有的本地客户端将获得您的公共域名的内部IP地址。 你也可以解决iptables的问题,但这将是更复杂的解决scheme。