iptables、bridge-utils 和 route
我在 Linux 服务器上有两块网卡,不知道如何让它们通信。经过大量搜索,我仍然不知道哪种方法有效,也不知道使用每种方法的含义。
这是我的系统。
cat5 cable +----------------------------------+ cable
<------------- | my server |<------> WiFi router
router | eth1 eth2 | 192.168.0.1
& internet | 10.11.12.13 192.168.7.7 | gw:192.168.7.7 ?
| gateway: 10.1.1.1 | 192.168.0.x for WiFi clients
wifi 客户端应该能够访问互联网和 10.xxx 子网,但 wifi 客户端不能位于 10.xxx 子网,它们必须具有 192.168.xx 范围内的 IP 地址。
那么我该如何连接这两个网络呢?我该使用 iptables 吗?我该使用 linux “route” 命令吗?我该使用 bridge-utils 来搭建网桥吗?
此外,WiFi网关应该是 192.168.0.1 还是 192.168.7.7?
我已将服务器至路由器的电缆插入 WAN 端口。
PS 我曾在 StackExchange (i) 网络和 (ii) Linux 上询问过这个问题,但没有得到答案,(iii) 也尝试过 Reddit。
答案1
桥接用于向网络添加/合并段。当您桥接两个网络接口时,您正在做的是允许网络广播到达所有节点。桥接不适用于您尝试执行的操作。
为了使路由器正常运行,这里有一个基本参考:
检查路由的 IP 转发状态:
sysctl net.ipv4.ip_forward
设置(启用)路由的 ip 转发状态:
echo 1 > /proc/sys/net/ipv4/ip_forward
取消设置(禁用)路由的 ip 转发状态:
echo 0 > /proc/sys/net/ipv4/ip_forward
在您验证已启用 IP 转发后,您可以在公共接口(具有物理互联网连接的网络接口)上使用 iptables 作为 NAT 接口。
我不会在这里尝试全面解释 NAT,但这是一个基本示例:
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
/sbin/iptables -A FORWARD -i eth1 -o eth2 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -i eth2 -o eth1 -j ACCEPT
你可以像这样看到 nat:
sudo iptables -L -t nat
答案2
我思考你应该使用 iptables 连接这两个接口。根据这个http://www.linuxforums.org/forum/newbie/186273-iptables-forwarding-vs-ip-route-post877996.html#post877996
路由器的网关应该是 192.168.1.7,以允许来自子网的 IP 数据包发送到 eth2。iptables 应该从那里处理它,并且前锋将其连接至 eth1。
这是对类似问题的答案,详细说明了 iptables 转发规则。 https://serverfault.com/questions/431593/iptables-forwarding-between-two-interface