我有一个mikrotik RB2011路由器/防火墙。 在防火墙内部,我有一个具有私有IP的Web服务器(可以说它是192.168.1.5)
在防火墙的WAN端,我有一个静态IP(假设它是192.0.43.10 – www.example.com)。
防火墙/路由器正在运行NAT。
我有一个dstnat规则来通过HTTPSstream量到服务器,并工作。
现在,老问题是,如果一个内部的电脑试图连接https://www.example.com它无法加载页面与铬这个错误:
Google Chrome与www.example.com的连接尝试遭到拒绝。 该网站可能已closures,或者您的networking可能无法正确configuration。
以下是一些build议:稍后重新加载此网页。 检查您的Internet连接。 重新启动您可能正在使用的任何路由器,调制解调器或其他networking设备。 将Google Chrome作为允许的程序添加到防火墙或防病毒软件的设置中。 如果它已经是允许的程序,请尝试从允许的程序列表中删除它并重新添加。 如果您使用代理服务器,请检查您的代理设置或与networkingpipe理员联系,以确保代理服务器正在工作。 如果您不相信应使用代理服务器,请调整您的代理设置:转至Chrome菜单>设置> +显示高级设置>更改代理设置…,并确保您的configuration设置为“无代理”或“直接”。 错误102(net :: ERR_CONNECTION_REFUSED):服务器拒绝连接。
传统上,我已经通过使用拆分DNS或双DNStypes的设置来解决这个问题,其中www.example.com的dns查找返回了服务器的内部IP而不是外部。 不过,我没有这个设置的豪华。
应该有一种方法来解决这个在mikrotik使用prerouting规则,但我不确定如何设置。 我该怎么做?
这是我在自己的桌子上。 但是,事实并非如此。 我正在服务器上运行tcpdump,但我可以看到,数据包实际上并没有达到它。
[admin@MikroTik] /ip firewall nat> print Flags: X - disabled, I - invalid, D - dynamic 0 chain=dstnat action=dst-nat to-addresses=192.168.0.10 protocol=tcp dst-address=114.134.xxx.xxx in-interface=wan dst-port=22 1 chain=dstnat action=dst-nat to-addresses=192.168.0.10 protocol=tcp dst-address=114.134.xxx.xxx in-interface=wan dst-port=443 2 chain=srcnat action=masquerade src-address=192.168.0.0/24 dst-address=192.168.0.0/24 3 ;;; default configuration chain=srcnat action=masquerade to-addresses=114.134.xxx.xxx out-interface=wan
如果复杂的“发夹_NAT”不是你的场景,解决scheme为懒:
只需在MT设备中添加一个指向本地服务器的静态DNS条目。 所有本地请求得到正确解决绕过路由器,所有外部的东西忽略你的DNS条目,所以去dstnat路由。
/ip dns set allow-remote-requests=yes cache-size=8048KiB servers=\ 8.8.8.8,8.8.4.4 /ip dns static add address=192.168.1.5 name=www.example.com
假设你正在运行你自己的内部DNS服务器,你可以授权“example.com”区域,然后将所有其他查询转发到OpenDNS或Google的公共parsing器(或充当recursionparsing器,这并不困难)。 在您的内部权威“example.com”区域中,您需要拥有与您面向全球的权威专区中的所有logging相对应的logging,但需要提供非公开的IP号码。 下面的示例演示了DNS服务器向内部和外部客户端提供单独的答案,使内部stream量保持在本地。
因此,您的非公有区域(存储在example.com_internal文件中)可能如下所示:
$ TTL 7D
$ ORIGIN example.com
@ IN SOA example.com。 hostmaster.example.com(
1000001; 序列号
8H; 刷新间隔
2H; 重试间隔
4W; 呼气
1D; 最低限度
)
@ IN NS dns.example.com
@ IN A 192.168.1.5
dns IN A 192.168.1.3
dns IN A 192.168.1.4
www CNAME @
和你的公共区域(存储在文件example.com_public)可能看起来像
$ TTL 7D
$ ORIGIN example.com
@ IN SOA example.com。 hostmaster.example.com(
249590; 序列号
8H; 刷新间隔
2H; 重试间隔
4W; 呼气
1D; 最低限度
)
@ IN NS dns.example.com
@ IN A 192.0.43.10
www CNAME @
dns IN A 192.0.43.10
然后你会configuration你的名字服务器如下所示:
选项{
目录“/ var / named”;
};
控制{
inet 127.0.0.1 allow {localhost; } keys {rndc_key; };
};
键“rndc_key”{
algorithmhmac-md5;
秘密“ht3pp9a4cik1aq530g6uri06p9g28yrvikqdzr7h”;
};
acl内部{
127.0.0.0/8;
192.168.1.0/24;
}
acl external {
!192.168.1.0/24;
!240.0.0.0/4;
}
查看内部{
match-clients {internal; };
货代{8.8.8.8; 8.8.4.4;};
只有前进;
区域“0.0.127.in-addr.arpa”{
型主人;
文件“zone / 127.0.0”;
allow-query {192.168.1.0/24;};
};
区域“1.168.192.in-addr.arpa”{
型主人;
文件“zone / 192.168.1”;
allow-query {192.168.1.0/24;};
};
区域“example.com”{
型主人;
文件“zone / example.com_internal”;
allow-query {192.168.1.0/24;};
};
}
查看外部{
match-clients {external; };
recursion否;
区域“example.com”{
型主人;
文件“zone / example.com_public”;
};
区域“43.0.192.in-addr.arpa”{
型主人;
文件“zone / 192.0.43”;
};
}
这一切都是非常现成的,在部署到生产环境之前,您应该在实验室环境中进行testing。 对于“example.com”中的任何内容,您的机器将获得内部地址,客户将获得公共地址。 您还需要在您的DNS服务器之间build立主从协调,以确保复制和一致性。