我想要实现的目标:
通过 (1) 使用 iptables (2) 以太网接口 (3) 环回接口(仅使用一台机器)测试/配置所有 NAT 场景(全锥、端口受限等)
设置以下配置:
我在 Linux BOX 中运行一个虚拟机,并执行了以下配置:
Linux BOX IP 为:192.168.0.4
Linux Box Virtual Box网关 IP 为:192.168.56.1
在 Linux Box上运行绑定的 Stun 服务器:(192.168.56.1
主要)和192.168.0.4
(次要)
在 VM 上运行 Stun 客户端(在 Linux 服务器上运行)127.0.0.1:2000
,并配置 iptables 规则以将环回接口流量转发到以太网接口(192.168.56.102
),反之亦然。
预期结果
我应该能够通过 iptables/ethernet/loopback 接口配置每个 NAT 模拟,STUN 服务器在主机上运行,Stun 客户端在 VM 上运行,它应该告诉NAT 的类型
实际结果
iptables 对输入/输出到环回接口套接字的数据包不做任何事情sendto调用失败并出现错误:“错误 22 无效争论”,因为套接字已绑定127.0.0.1:2000
且目标地址为:192.168.56.1
简而言之见下文
[Loopback-Interface(127.0.0.1 :2000 / *Running STUN Client*/ VM) -->[*IPTABLES RULES TO/FROM*] <-- Ethernet-Interface(VM -- 192.168.56.102:2000) ==>|| ==> HOST(Gateway - 192.168.56.1:3478 - *Running STUN Server*)] ::
示例规则 ::
sudo iptables -t nat -A POSTROUTING -o eth0 -p udp --source 127.0.0.1 --sport 2000 -j SNAT --to-source 192.168.56.102
sudo iptables -t nat -A POSTROUTING -o eth0 -p tcp --source 127.0.0.1 --sport 2001 -j SNAT --to-source 192.168.56.102
sudo iptables -t nat -A PREROUTING -i eth0 -p udp --destination 192.168.56.102 --dport 2000 -j DNAT --to-destination 127.0.0.1
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --destination 192.168.56.102 --dport 2000 -j DNAT --to-destination 127.0.0.1
似乎 iptables 没有从环回接口挑选数据包
请让我知道是否有任何机构可以提供帮助。