Freebsd如何转发任何类IP?

时间:2014-12-06 07:44:34

标签: sockets unix freebsd

我安装了一个FreeBSD 10.0服务器(IP:10.1.2.3),并且希望使用假源ip将数据包发送到远程客户端,例如:

socket_sendto($socket $data, $length, 0, $ip, $port)

$ data包含IP标头,其中我指定了我的"假ip"这里。

问题是:

  1. 如果我指定IP到C类,一切顺利(低于成功):

    10.1.2.4
    10.1.3.5
    
  2. 如果我指定IP到B或A类,则没有任何内容发送到目的地(下面失败):

    10.2.1.2
    11.1.2.3
    
  3. 那么,我该如何解决这个问题呢?

    顺便说一句,我已经将sysctl.conf修改为:

      net.inet.ip.forwarding=1
      net.inet6.ip6.forwarding=1
      net.inet.ip.fastforwarding=1
    

    抱歉英语不好。

2 个答案:

答案 0 :(得分:0)

可能与路由(netmasks)有关。如果您的服务器IP是10.1.2.3/16,则所有IP地址(如10.1.X.Y)都可以直接访问,但如果您尝试发送到此范围之外的IP地址,则IP数据包将通过路由器传输。正确配置的路由器不应该传递这样的伪包。您应该检查defaultrouter中的/etc/rc.conf设置。这个defaultrouter 可以接收这样的假数据包,除非你的FreeBSD机器阻止它们。

答案 1 :(得分:0)

@Kestas是对的,请尝试下面的命令:

1)验证您是否有到目的地的路线;

# netstat -ln 

2)测试连接性:

# tracepath 10.2.1.2

3)穿上相同的网络:

# ifconfig re0 10.2.1.1 / 255.0.0.0

GL!