这是我参与更文挑战的第23天,活动详情查看:更文挑战
一、前言
记录一下,之前遇到的问题
之前使用
Seafile和Onlyoffice碰到类似IP回流的问题。Onlyoffice支持在线协同编辑,需要websocket进行监听。
一开始配置如图:
问题:服务 seafile 需要通过域名访问在内网的服务onlyoffice。
环境:
- 服务器外网
IP:100.1.1.1 seafile的IP和 端口:172.24.9.54:8890onlyoffice的IP和 端口:172.24.9.54:8891onlyoffice域名:https://api.home.cn/onlyoffice,nginx做了映射
172.24.9.54:8890 通过域名 https://api.home.cn/onlyoffice 能访问到嘛?
答案:不能。
因为 TCP 不能建立连接。
服务
seafile(172.24.9.54:8890) 访问域名https://api.home.cn/onlyoffice(DNS映射为100.1.1.1:443),在通过防火墙上NAT SERVER后,目的IP变为了172.24.9.54:8891,由内部网络将TCP握手报文发给了172.24.9.54:8891(onlyoffice);onlyoffice发现源IP是172.24.9.54:8890,因为在同一网络,走本地路由将报文发送给seafile。
问题来了:
seafile(172.24.9.54:8890) -> 建立连接 -> 服务器外网(100.1.1.1:443)
onlyoffice(172.24.9.54:8891) -> 回报文 -> seafile(172.24.9.54:8890)
即来回路径不一致,TCP 握手没办法建立。
二、解决
一般两种方式:
- 通过域名访问,可以加
host或者dns将域名解析为内网ip - 通过
ip访问,华为防火墙多配置一条域内源nat策略;H3C防火墙在内网接口再做一次nat server同时加域内源nat。
测试改成内网,部署后,用 IP 访问一切正常。
用域名访问,则打不开,建立不了连接。
那么就只有在建立连接的时候出现了问题,无法建立连接,导致访问不了。
我这解决方法: 访问的时候改为内网 IP:
NAT 访问回流。