Linux:使用 iptables 在两个网络之间路由流量

Linux:使用 iptables 在两个网络之间路由流量

好的,这是一个奇怪的网络设置,但我正尝试将互联网从一个网络转移到另一个网络。

headless server ((((( wireless router (other network)-----internet
       |
       |
router (my network) ))))) wireless computers
   |   |   |
wired computers

因此,基本上,我有一个无头 Linux 盒,我想将其设置为我的网络 (eth0) 和另一个网络 (wlan0) 之间的路由器。我应该能够配置其他所有内容,但我对 iptables 不太熟悉。

我以前在两个有线网络之间做过同样的事情,但我从未写下规则。

答案1

实际上,您并不需要 iptables 进行基本路由 - iptables 可以帮助您进行过滤和 NAT(以及其他操作)。

您可以使用以下命令激活数据包转发:

sysctl -w net.ipv4.conf.all.forwarding=1

添加net.ipv4.conf.all.forwarding=1到 /etc/sysctl.conf 以使设置保留。

如果你在服务器上进行过滤(您可以使用以下命令进行检查iptables -nvL- 如果 FORWARD 链具有策略 ACCEPT,则您没有进行过滤),您需要添加规则以允许数据包在网络之间转发:

iptables -I FORWARD -i eth0 -o wlan0 -s wi.red.net.work/24 -d wire.less.net.work/24 -j ACCEPT
iptables -I FORWARD -i wlan0 -o eth0 -s wire.less.net.work/24 -d wi.red.net.work/24 -j ACCEPT

如果您没有进行过滤但想要进行过滤(顺便说一下,您也应该这样做 - 请参阅@Red Tux 的评论,默认过滤并仅允许最低限度是一种很好的做法),请添加前面的规则以及这一条:

iptables -P FORWARD DROP

这会改变策略,因此所有不匹配任何规则的数据包都会被丢弃。

此外,如果您追求真正的安全性,您可能还应该在 INPUT 链上进行过滤。此链处理到达路由器的请求,其目标 IP 与其自身 IP 相匹配 - 即传入连接(例如 SSH)。合理的默认值是:

iptables -I INPUT -i eth0 -s allowed.admin.ip.here -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -i lo -j ACCEPT
iptables -P INPUT DROP # make sure you've put your IP on the first rule before running this 
                       # or you'll lock you out of the server

这仅允许从有线网络中的指定主机进行 SSH(注意警告),允许环回接口上的所有流量(某些软件需要)并丢弃所有其余流量。

如您所见,您可以使用 仅允许某些端口通过-p tcp|udp --dport N。您还应考虑在 FORWARD 链上执行此操作以提高安全性。

相关内容