本质的流程就是客户端发送认证数据包,服务端收到后进行校验,合法就打开端口,否则不进行处理。下面使用场景中会对工作量流程进行进一步的解释,有关工作原理及源码分析则在后续的博客中进行介绍。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m5H59nRs-1634461598082)(/附件/03.%20images/direct_connect.png)]](https://1000bd.com/contentImg/2024/03/29/9c0904e6f29f0754.png)
fwknop -n 192.168.3.4 -a 192.168.3.3 进行敲门以下图片来自官网:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QKP9H4he-1634461598084)(/附件/03.%20images/fwknop_tutorial_network_diagram.png)]](https://1000bd.com/contentImg/2024/03/29/4a1e866b044139f2.png)
问题:由于spaclient和受保护的服务都在各自的内网,客户端执行 fwknop -n 10.1.2.10 -a 192.168.10.123,spaserver 是无法收到数据包的
解决:此时就要用到fwknop提供的NAT功能了,具体如下
/etc/fwknop/fwknop.conf 文件中的 ENABLE_IPT_FORWARDING 要设置为 Yfwknop -n 2.2.2.2 -a 1.1.1.1 -N 10.1.2.10:22解释说明:
-a 1.1.1.1 是因为spaclient出公网时src_ip会变成 1.1.1.1-n 2.2.2.2 则是spaserver的地址-N 10.1.2.10:22 则表示spaserver需要将 1.1.1.1 过来的流量转发到 10.1.2.10:22 上以Ubuntu环境为例,分别在两个不同的虚拟机里下载fwknop-server和fwknop-client,下载命令如下:
/etc/fwknop/fwknopd.conf 中的 PCAP_INTF 项,将其指定为网卡名称fwknop -A tcp/22 -a 1.1.1.1 -D spaserver.domain.com --key-gen --use-hmac --save-rc-stanza 客户端执行此命令,会在 .fwknoprc文件中生成如下内容:[spaserver.domain.com]
ACCESS tcp/22
ALLOW_IP 1.1.1.1
SPA_SERVER spaserver.domain.com
KEY_BASE64 Sz80RjpXOlhH2olGuKBUamHKcqyMBsS9BTgLaMugUsg=
HMAC_KEY_BASE64 c0TOaMJ2aVPdYTh4Aa25Dwxni7PrLo2zLAtBoVwSepkvH6nLcW45Cjb9zaEC2SQd03kaaV+Ckx3FhCh5ohNM5Q==
USE_HMAC Y
KEY_BASE64 和 HMAC_KEY_BASE64的值拷贝到spaserver的 /etc/fwknop/access.conf中对应的 KEY_BASE64 和 HMAC_KEY_BASE64 中,并增加 REQUIRE_SOURCE_ADDRESS 配置,如下所示: SOURCE ANY
REQUIRE_SOURCE_ADDRESS Y
KEY_BASE64 Sz80RjpXOlhH2olGuKBUamHKcqyMBsS9BTgLaMugUsg=
HMAC_KEY_BASE64 c0TOaMJ2aVPdYTh4Aa25Dwxni7PrLo2zLAtBoVwSepkvH6nLcW45Cjb9zaEC2SQd03kaaV+Ckx3FhCh5ohNM5Q==
sudo fwknopdsudo fwknopd -Sfwknop -n 2.2.2.2 -a 1.1.1.1在客户端执行 telnet ip port 命令执行成功就表示端口被成功打开。
参考: