本地网络有 Wifi 路由器作为 NAT 服务器,连接到 ISP。需要在路由器和 ISP 之间放置防火墙来过滤传入和传出的流量,因为路由器内置的防火墙太过简单。
因此,在路由器和 ISP 之间添加了一台具有两个 NIC(预期的防火墙)并运行 Debian Stretch 的机器:
[Wifi router(NAT server)]- - - - -[eth1]=[firewall(NAT server)]=[ppp0]
| |
| |
| |
[local network] [ISP]
目前防火墙只测试了ISP和路由器之间的数据包转发,所以只添加了3条转发iptables规则:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o ppp0 -j ACCEP
这些规则显然不足以执行完美的转发,因为某些 https 地址无法再在本地网络中的浏览器中打开,并且在状态栏中冻结“正在执行 TLS 握手...”行。
值得注意的是,几乎所有主流网站(例如 gmail、youtube、bing、reddit 等)都没有这个问题。因此,导致此问题的原因可能是不同的 TLS 协议版本,不同的证书类别或不同的配置等。
防火墙机器上的接口配置如下:
$ ip link
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether <MAC_ADDRESSS>
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
link/ether <MAC_ADDRESS>
4: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 3
link/ppp
$ ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether <MAC_ADDRESS>
inet 10.*.*.*/21 brd 255.255.255.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 ***/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
link/ether <MAC_ADDRESS>
inet 192.168.2.1/24 scope global eth1
valid_lft forever preferred_lft forever
inet6 ***/64 scope link
valid_lft forever preferred_lft forever
4: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UNKNOWN group default qlen 3
link/ppp
inet 10.*.*.* peer 81.*.*.*/32 scope global ppp0
valid_lft forever preferred_lft forever
如何解决此问题?