我正在尝试演示使用未安装侦听器的 Ubuntu 18.04 盒(模拟 QNX 设置)的 TCP 通信。考虑到由于某些许可问题,可能无法很快加载和运行侦听器程序。是否可以使用 iptables 接受来自客户端的连接,接收传入的数据包并将其发送回客户端?
如果是,命令是什么?我想使用 netcat 来演示消息的发送和接收。
我已经尝试过以下命令这关联。
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.conf.ens4.route_localnet=1
sudo iptables -A FORWARD -i ens4 -o ens4 -m state --state RELATED,ESTABLISHED -j ACCEPT
我也尝试了下面来自另一个 StackOverflow 问题的命令。
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination <IP>:80
sudo iptables -t nat -I OUTPUT -p tcp --dport 80 -j DNAT --to-destination <IP>:80
但 netcat 立即退出。不确定它是否尝试过连接。
netcat <IP> 80
除了 iptables 之外的其他想法也受到欢迎。
答案1
对于简单的演示,使用转发流量可能更容易ncat
,就像在答案中一样这里基本上只需使用 ncat 作为您的监听器,然后启动另一个 ncat 将任何数据重新发送回您的客户端。(确保您的客户端也在您选择的任何端口上监听此数据)
ncat -l 10.0.0.1 80 --sh-exec "ncat 10.0.0.2 80"
这足以查看您自己发送的流量,但只能在一个方向上起作用。如果您需要查看来回流量(如网络流量),那么您可能需要更高级的功能,例如您尝试过的 iptables 路由。
dnat
规则中的代表d目标网络地址转换,它们只重新映射数据包的目标 IP。由于您计划的源和目标是同一个 IP,因此您还需要设置snat
规则来重新映射源 IP 地址:
iptables -t nat -A PREROUTING -p tcp --dst $HOST_IP --dport 8000 -j DNAT --to-destination $CLIENT_IP
iptables -t nat -A POSTROUTING -p tcp --dst $CLIENT_IP --dport 8000 -j SNAT --to-source $HOST_IP
我找到了几篇关于此的很好的文章:
- Linux 数据包过滤和 iptables DNAT 指南
- 一些使用 iptables 的 SNAT、DNAT 示例(带注释)
- 在接口上启用 IP 转发,还包含配置为网关的 iptables 步骤
客户端测试用例示例:
# listen on port 8000 in background
nc -l 8000 > nc.out &
# verify netcat is listening on client
netstat -ln | grep 8000
# send some data to server via netcat, and you should see job finish if server forwarded successfully
echo hello world | nc 10.0.0.1 8000
[1]+ Done nc -l 8000 > nc.out
# and you should see your data captured
cat nc.out
hello world
根据您的发行版,您可能无法监听受保护的端口,如 80(例如 selinux 可能会阻止)。确保您已启用 ip 转发,因为它通常默认关闭:
# check current status
sysctl net.ipv4.ip_forward