如何将数据包从网络接口转发到另一个

如何将数据包从网络接口转发到另一个

我的问题是将数据包从我的 LAN eth2 转发到可以访问互联网的 eth1,以允许 eth2 访问互联网,这是我的配置:

auto eth1
iface eth1 inet static
    address 192.168.3.1
    netmask 255.255.255.0
    network 192.168.3.0
    broadcast 192.168.3.255
    gateway 192.168.3.254

auto eth2
iface eth2 inet static
    address 10.101.26.1
    netmask 255.255.0.0
    network 10.101.0.0
    broadcast 10.101.255.255

iptables 配置:

iptables -A FORWARD -i eth2 -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth2 -j ACCEPT

已经取消注释net.ipv4.ip 转发=1/etc/sysctl.conf并在/proc/sys/net/ipv4/ip_forward

如果我用连接在 LAN 上的 PC 进行测试,并且网关为 10.101.26.1,那么我无法访问互联网,那么我该如何解决这个问题呢?

感谢您的帮助!问候

答案1

您需要某种伪装语句。其背后的原因是,目前,从 eth2 到达 eth1 的数据包由 10.101.0.0/16 地址标识。然后,这些 10.101.0.0/16 数据包尝试通过 eth1 (192.168.3.0/24) 穿越网络。这会失败,因为这些数据包尚未被伪装的作为来自 192.168.3.1 的数据包。

下面这样的小脚本应该会有所帮助。根据需要进行修改:

/bin/bash #!/bin/bash

IPTABLES=/sbin/iptables

WANIF='eth1'
LANIF ='eth2'

# 在内核中启用 IP 转发
echo ‘启用内核 IP 转发...’
/bin/echo 1 > /proc/sys/net/ipv4/ip_forward

# 刷新规则并删除链
echo‘刷新规则并删除现有链……’
$IPTABLES -F
$IPTABLES -X

# 启用伪装以允许 LAN 互联网访问
echo ‘启用 IP 伪装和其他规则...’
$IPTABLES -t nat -A POSTROUTING -o $LANIF -j MASQUERADE
$IPTABLES -A FORWARD -i $LANIF -o $WANIF -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -i $WANIF -o $LANIF -j ACCEPT

$IPTABLES -t nat -A POSTROUTING -o $WANIF -j MASQUERADE
$IPTABLES -A FORWARD -i $WANIF -o $LANIF -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -i $LANIF -o $WANIF -j ACCEPT

回显‘完成’。

答案2

根据您的描述,我假设您的 PC 位于路由器后面,eth1 通过路由器连接到互联网。您必须在路由器上创建一条通过 192.168.3.1 到 10.101.0.0/16 的静态路由,以便发往该网络的回复数据包可以转发到您的 PC。

相关内容