Когда вы помещаете "| tee", оболочка, интерпретирующая сценарий, создает новую оболочку для цикла. Вставка a засыпание в цикле и запуск скрипта в фоновом режиме дает следующий список процессов:
PID TTY TIME COMMAND
21168 pts/0 0:00 sh
21259 pts/0 0:00 ps
11962 pts/0 0:00 sh
21170 pts/0 0:00 sleep
21171 pts/0 0:00 tee
21169 pts/0 0:00 sh
Как видите, в конце списка есть дополнительная оболочка. Вы можете получить тот же результат с помощью этого скрипта:
STATUS=9
echo "" > /tmp/ses.txt
for SESSION in A B C
do
STATUS=5
echo "SESSION=$SESSION STATUS=$STATUS" | tee -a /tmp/ses.txt
done
echo "STATUS=$STATUS"
, но без упомянутого побочного эффекта.
Примечание. :Wi-Fi A и B должны находиться в разных подсетях, иначе система Linux будет жаловаться.
Я предполагаю, что eth0 для ПК,затем вы можете использовать это правило для достижения желаемого для портов ssh и tcp:
iptables -t filter -A FORWARD -i eth0 -o <Interface> -d <Des subnet> -p tcp --dport <Des Port> -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
Чтобы разрешить пинг, вы можете использовать:
iptables -t filter -A FORWARD -i eth0 -o <Interface> -d <Des subnet> -p icmp --icmp-type 8 -j ACCEPT
Поскольку вы, похоже, используете один и тот же диапазон адресов для Wi-Fi A и WiFi B, а у Linux есть только один адрес в этом диапазоне, я думаю, вам нужно будет соединить два интерфейса wlan (, т.е. рассматривать их как один сети ), и в этом случае ваши правила iptables должны будут ссылаться на интерфейс моста.
См. этот вопрос для некоторых идей о настройке фильтрации в мостовой сети. В качестве альтернативы, если вы назначили разные подсети 192.170.1.xx для каждой сети Wi-Fi, тогда Linux-боксу потребуется 1 IP-адрес в каждой подсети, а не один адрес 192.170.1.253, который вы укажете.