作者andytzeng (Ya-Shiuan)
看板LinuxDev
标题Re: [问题] 请问iptables和ip queue
时间Sun Apr 8 22:23:21 2007
※ 引述《woomar (hi)》之铭言:
: 我想请问一下
: 我有一台机器有两张网卡
: eth0是对外的(192.168.1.3)
: eth1是对内的(192.168.3.254)(NAT GW)
: 这台机器本身就有做NAT
: 我现在想要用iptables加上ip queue的方法做封包的tunnel
: 不晓得是不是因为NAT的关系
: 我只能在FORWARD 抓到封包(ex:192.168.1.4-->192.168.3.9)
根据 netfilter hook 法则,的确 1.4 -> 3.9 的 packet
会先经过 prerouting 再经过 forward 由 eth1 出去
( net.ipv4.ip_forward == 1)
: 然後我用libipq修改封包
: 想要把封包tunnel给192.168.1.5
: 我在ip header上修改了dst addr
: 也重新算过checksum
: 也用过ipq_set_verdict(NF_ACCEPT)
: 不过封包并没有送给192.168.1.5
: 不管是只修改daddr+checksum
: 或是多加一层ip header上去都没有用
: 我想请问的是
: 是因为已经到forward阶段了
: 所以给192.168.1.5的封包被drop掉了吗
: 我应该要怎麽做才能让这些封包藉由eth0送给192.168.1.5呢?
看你的情况 ipq 的 rule 应该是 hook 在 forward 上
我记得 forward 似乎不能 input/output 同一个 interface
(也许我记错了...!!)
以你的情况,如果是 1.4 -> 3.9 想要转送给 1.5 就形成
in/out 同个 if
我之前的经验是藉由 libipq 将 packet 抓起来後,利用 raw
socket 将改过的 packet 再送出去即可,完成後回 nf_drop 给
ipq ,让他可以将 packet free, accept 就会继续送给 3.9
如此应该可以达到你的要求
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.188.188
1F:推 woomar:感谢 我今天嚐试了依下 将s:1.4 d:3.9 -->s:3.9 d:1.5 04/10 03:37
2F:→ woomar:再将ACK tunnel回去 还是依样没成功 看起来只有用rawsocket 04/10 03:39