我有一个家庭服务器,只提供了一个公共 IPv6 地址。它在 caddy 反向代理(也是 dockerized)后面为 searxng(dockerized)提供服务。如果访问设备具有 IPv6 连接,则从外部访问可以正常工作(通过 searx.my.domain)。
我的Caddy文件:
searx.my.domain {
reverse_proxy http://192.168.178.2:8898
}
我想让实例在仅 IPv4 网络上可用。为此,我尝试使用在 uber.space 共享服务器上运行的 socat。我找到了本指南 (https://timurnet.de/blog/devops/setup-port-tunnel-for-ipv6-networks-with-uberspace/) 并尝试根据我的问题进行调整。
因此我向我的 uberspace 添加了一个端口,假设它是 12345。然后我使用以下命令启动了 socat:
socat -v tcp4-listen:12345,fork,reuseaddr tcp6-connect:searx.my.domain:443
如果我现在尝试浏览https://myname.uber.space:12345我明白了
This site can’t provide a secure connection
myname.uber.space sent an invalid response.
ERR_SSL_PROTOCOL_ERROR
我还尝试将 socat 指向谷歌,以便弄清楚我的 socat 命令是否正确(似乎是这样):
socat -v tcp4-listen:12345,fork,reuseaddr tcp6-connect:google.com:443
在这种情况下我得到
Your connection is not private
Attackers might be trying to steal your information from keckz.uber.space (for example, passwords, messages, or credit cards). Learn more
NET::ERR_CERT_COMMON_NAME_INVALID
跳过证书警告后,我收到 google 404 错误页面
404. That’s an error.
The requested URL / was not found on this server. That’s all we know.
但连接似乎正常。
那么我这里是否存在球童配置问题?
答案1
服务器期望在 searx.my.domain 的 TLS 握手中建立带有 server_name (SNI) 的 TLS 连接。但是如果您访问该站点,则https://myname.uber.space:12345
server_name 将是 myname.uber.space。没有针对此类服务器名称的配置,因此出现 ERR_SSL_PROTOCOL_ERROR。
您需要确保 a) 服务器可以使用特定的 server_name 处理 TLS 连接,并且 b) 存在与给定名称匹配的有效证书。如果 a) 不匹配,您将收到 ERR_SSL_PROTOCOL_ERROR。如果 b) 不匹配,您将收到 NET::ERR_CERT_COMMON_NAME_INVALID。