iptables“错误的参数‘MASQUERADE’”

iptables“错误的参数‘MASQUERADE’”

我正在尝试使用 VirtualBo 在 Kali Linux 中为自己创建一个“邪恶双胞胎”接入点。我试图让我的 iPhone 连接并重新路由到一个虚假的“服务条款”页面。以下是我目前所做的

$apt=eth0
$wifi=wlan0
#when monitor mode is enabled, the enviroment varible will adapt the name wlan0mon


sudo sysctl -w net.ipv4.ip_forward=1
sudo systemctl start apache2
sudo ifconfig $wifi down
sudo ifconfig $wifi mode monitor
sudo ifconfig $wifi up
sudo airmon-ng check
sudo airmon-ng start $wifi

退出并重新打开 $wifi 终端以适应名称 wlan0mon

sudo airodump-ng $wifi

sudo airbase-ng -a $gatewayBSSID -e $gatewayESSID -c $ch $wifi

sudo cp /etc/dhcp/dhcpd.et.conf /etc/dhcp/dhcpd.conf
#et.conf is the non-original.
sudo ifconfig at0 up
sudo ifconfig at0 192.168.2.1 netmask 255.255.255.0
sudo dhcpd -cf /etc/dhcp/dhcpd.conf -pf /var/run/dhcpd.pid at0
sudo service isc-dhcp-server restart

sudo iptables --table nat --append POSTROUTING --out-interface $atp -j MASQUERADE

现在我陷入了困境。我的 iptables 命令的输出是

糟糕的论点‘假面舞会’

我无法想象为什么。我满足了所有要求。MASQUERADE 是一个真正的参数,但它就是没有被识别。没有进一步的信息,所以我无能为力。我对 iptable 转发规则也知之甚少。我试过了,但我花了 2 个小时试图解开 TCP/IP 结构,现在我知道的和刚开始时一样多,非常少。我如何进一步诊断这个问题的原因?

答案1

错误消息提到,MASQUERADE但问题的根源是$atp。有一个拼写错误。您的命令

sudo iptables --table nat --append POSTROUTING --out-interface $atp -j MASQUERADE

是真的

sudo iptables --table nat --append POSTROUTING --out-interface -j MASQUERADE

因为您定义了$apt=eth0但是然后使用不带引号的$atp(不是$apt,打字错误!)它会解析为不带引号的空字符串并消失。

实际上-j被视为接口名称,因此MASQUERADE作为独立参数出现,并且不像-j MASQUERADE通常那样运作。

如果您遵循最佳实践来引用变量,--out-interface "$atp"则会产生结果Empty interface is likely to be undesired,这将使您的注意力集中到"$atp"真正存在问题的参数上。引用的空字符串会为命令生成一个空参数(iptables在这种情况下,将其放在sudo一边是合理的),因此如果空字符串是意外的,则命令可以做出相应的反应,这很好。

未加引号的空字符串会消失。这会“转移”后面的参数。你永远不知道和iptables之间有什么。命令行解析器被愚弄,命令可能只会抱怨--out-interface-j其他参数,就像MASQUERADE你的情况一样。另一种选择更糟糕:一般来说,如果这些“移位”的参数恰好构建了正确的延续,则命令将使用你从未打算传递给它的选项数组运行。这可能很糟糕;这sudo可能非常糟糕。

教训是:引用你的变量。

相关内容