Я понял ответ. Проблема заключалась в том, что Verizon разорвет соединение, если получит 10 недействительных пакетов в течение 2 минут. Проблема заключалась в том, что я неправильно выполнял NAT-пакеты, так как я также использовал его в качестве маршрутизатора. Пакеты, отправляемые из локальной сети с мостом, отправлялись в Verizon с исходным IP-адресом 192.168.123.XXX. Веризон (совершенно справедливо )решил, что эти пакеты недействительны и разорвет соединение. Решение состояло в том, чтобы просто добавить это правило Iptables:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
В bash это непросто, но это можно сделать с помощью ассоциативных массивов.
#! /bin/bash
declare -A crypt=(
[A]="99_banana"
[a]="@_melon"
[B]="22_GRAPE"
[b]="orange"
[C]="Strawberry"
[c]="life"
['@']="12399"
['!']="tv_12"
)
encode () {
local word=$1
for ((i=0; i<${#word}; ++i)) ; do
local char=${word:$i:1}
printf %s ${crypt[$char]}
done
printf '\n'
}
declare -A decrypt
for char in "${!crypt[@]}" ; do
key=${crypt[$char]}
decrypt[$key]=$char
done
decode () {
local word=$1
while [[ $word ]] ; do
local code
for code in "${!decrypt[@]}"; do
if [[ $word == "$code"* ]] ; then
printf %s "${decrypt[$code]}"
word=${word#"$code"}
fi
done
done
printf '\n'
}
encrypted=$(encode 'Abc!')
decode "$encrypted"
Обратите внимание, что это может сломаться, если шифрование одного символа является подстрокой шифрования другого символа.
#! /bin/bash
declare -A crypt=(
[A]="99_banana"
[a]="@_melon"
[B]="22_GRAPE"
[b]="orange"
[C]="Strawberry"
[c]="life"
[' ']="space"
['@']="12399"
['!']="tv_12"
)
encode () {
local word=$1
for ((i=0; i<${#word}; ++i)) ; do
local char=${word:$i:1}
printf %s ${crypt[$char]}
done
printf '\n'
}
declare -A decrypt
for char in "${!crypt[@]}" ; do
key=${crypt[$char]}
decrypt[$key]=$char
done
decode () {
local word=$1
while [[ $word ]] ; do
local code
for code in "${!decrypt[@]}"; do
if [[ $word == "$code"* ]] ; then
printf %s "${decrypt[$code]}"
word=${word#"$code"}
fi
done
done
printf '\n'
}
encrypt=$(encode 'Abc !')
decrypt=$(decode "$encrypt")
echo "$encrypt"
echo "$decrypt"
Я просто добавил переменные, чтобы упростить понимание