在 cron 作业中编辑 IPTABLES nat 规则

在 cron 作业中编辑 IPTABLES nat 规则

我这里遇到一个问题:我需要在给定时间切换 iptables 的 NAT 规则的源接口。我基本上想做这样的事情 - 注意:概念代码:

#!/bin/bash
if [ it is 11.30pm ]; then
    iptables CHANGE FIRST RULE IN FORWARD CHAIN AND MAKE ORIGINAL -o wlan0 INTO -o ppp0
fi

需要在早上 8 点运行相同的脚本来将其向后更改 - 将 wlan0 更改为 ppp0。我正在使用 init.d 脚本设置我当前的 nat:

#!/bin/bash

### BEGIN INIT INFO
# Provides:          subnet
# Required-Start:    ifplugd
# Required-Stop:     $ifplugd
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Brings up the NAT system
# Description:       Initializes the NAT routing (SUBnet)
### END INIT INFO

# This is rather simple, as we have the script already...
[ "$1" != "" || "$1" != "start" ] && exit 0;

echo -n .
/sbin/iptables -A FORWARD -o wlan0 -i eth0 -s 192.168.200.0/24 -m conntrack --ctstate  NEW -j ACCEPT

echo -n .
/sbin/iptables -A FORWARD -m conntrack -ctstate ESTABLISHED,RELATED -j ACCEPT

echo -n .
/sbin/iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

echo
echo "[ OK! ] NAT is now initialized with wlan0->eth0."

这在启动期间运行良好,但我希望改变源界面,这样我就可以连续使用互联网。

在某些时候,ppp0 设备可能不存在,因此脚本也需要检查其是否存在,然后切换。我将使用 udev 规则(很可能)在设备连接后运行 sakis3g --connect。

有人知道如何实现吗?我是 cronjobs 的新手,对 IPTABLES 不是很了解,很高兴我能够将那个 init.d 脚本整合在一起 :)

答案1

iptables不控制数据包从哪个接口出去。它只是允许数据包从该接口出去,并更改其源地址。

为两个接口添加规则应该足以使 NAT 能够在两个接口上工作。

相关内容