我们正在尝试组装一个带有双 LAN 卡(假设为外部和内部)的盒子,其中内部 LAN 卡应该充当其所连接到的网络的默认网关。
这个盒子运行的是 Ubuntu。这个盒子的基本用途是接收内部网络生成的消息,对其进行处理,然后将其从外部 LAN 卡转发到服务器。内部网络完全隔离,只需一个普通交换机将内部 LAN 卡与另外两个盒子连接起来即可。
这些其他盒子要么发出多播消息(内部 LAN 卡正在监听),要么发送单播消息,该消息是发往不在该内部网络上的服务器的。因此,我们需要内部 LAN 卡充当默认网关,然后这些单播消息将被发送到该网关,然后双 LAN 卡盒上的代码可以拦截这些消息并将其转发到服务器。
问题:1. 我们如何将 LAN 卡设置为默认网关(在 Ubuntu 上是否需要进行一些配置)?2. 一旦完成此设置,是否只需侦听接口以拦截传入消息即可?
任何帮助(指向正确方向的指示)都将不胜感激。
谢谢。
答案1
你不需要对网卡做任何特殊的配置来使其成为默认网关。你只需要配置内局域网中的机器使用此网卡 IP 作为其默认网关。
要在两个子网之间路由数据包,您需要使用以下命令启用 IPv4 转发:
# echo 1 > /proc/sys/net/ipv4/ip_forward (as root)
为了使其永久生效,请编辑该文件/etc/sysctl.conf
并取消注释该行:
net.ipv4.ip_forward=1
对于数据包拦截,您可以用 C/C++ 编写程序。您可以使用 libpcap 获取到达内部 NIC 的流量并执行您需要的任何处理。我无法提供更多详细信息,因为我不知道您想要执行的处理类型。