如何在两个 NAT 之间转发数据包时解决 TLS 握手问题?

如何在两个 NAT 之间转发数据包时解决 TLS 握手问题?

本地网络有 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

如何解决此问题?

相关内容