我想要以下规则转发 tcp 数据包从127.0.0.1:32770到172.17.0.36:1000
和转发数据包从127.0.0.1:32771到172.17.0.36:10001
和转发数据包从127.0.0.1:32772到172.17.0.36:10002
iptables -t nat -A DOCKER ! -i docker0 -p tcp -m tcp --dport 32770:32771 -j DNAT --to-destination 172.17.0.36:1000-1002
Run Code Online (Sandbox Code Playgroud)
但目前它可以将所有数据包转发127.0.0.1:32770-32771到任何一个172.17.0.36:1000-1002
小智 5
我花了很多功夫才找到这个,终于找到了一个绝对有效的解决方案,您的情况下的命令是:
iptables -t nat -A DOCKER ! -i docker0 -p tcp -m tcp --dport 32770:32771 -j DNAT --to-destination 172.17.0.36:1000-1002/32770
Run Code Online (Sandbox Code Playgroud)
这里,32770是基端口,映射将从那里开始,例如:
32770 -> 172.17.0.36:1000
32771 -> 172.17.0.36:1001
Run Code Online (Sandbox Code Playgroud)
现在,假设传入范围和传出范围不相等:
iptables -t nat -I PREROUTING -p tcp --dport 30000:30199 -j DNAT --to 10.1.1.1:40000-40099/30000
Run Code Online (Sandbox Code Playgroud)
在上述情况下,DNAT 映射将像这样舍入自身:
30000 -> 10.1.1.1:40000
30001 -> 10.1.1.1:40001
...
30099 -> 10.1.1.1:40099
30100 -> 10.1.1.1:40000
30101 -> 10.1.1.1:40001
...
30199 -> 10.1.1.1:40099
Run Code Online (Sandbox Code Playgroud)
DNAT 中添加了对基于基本端口的 1:1 端口映射的支持。请参阅以下链接: http://git.netfilter.org/iptables/commit/ ?id=36976c4b54061b0147d56892ac9d402dae3069df
我已经看到它在 Linux 内核 4.19 及更高版本中工作。
| 归档时间: |
|
| 查看次数: |
2135 次 |
| 最近记录: |