/sbin/iptables -t nat -A PREROUTING -p tcp --dport 80 -d 10.13.235.42 -j DNAT --to-destination 209.208.27.224:27279
Работает с таблицей nat
.
Применяет правило к таблице PREROUTING
, так что решения, принятые в этом правиле, могут повлиять на то, какое решение по маршрутизации будет принято.
Строго для соединений с портом 80 на 10.13.235.42
, который предположительно является одним из IP-адресов этой машины.
Установите новый пункт назначения в качестве порта 27279 на 209.208.27.224
. Если 10.13.235.42
является IP-адресом этой машины, то это необходимо для того, чтобы ядро не думало, что это конечный пункт назначения для трафика. На данный момент IP-адрес назначения в входящем пакете был изменен.
-j DNAT
просто означает, что мы используем NAT для назначения, а не скрываем источник соединения от места назначения (которым был бы SNAT
).
/sbin/iptables -t nat -A POSTROUTING -p tcp --dport 27279 -j MASQUERADE
Работает с таблицей nat
после того, как было принято решение о маршрутизации.
Совпадает с любыми tcp-пакетами, предназначенными для порта 27279
на любой IP-адрес и с него. Полагаю, идея здесь в том, что нам не нужно быть слишком конкретными, так как это необычный номер порта.
Говорит кернелу на MASQUERADE
, что означает, что пакеты модифицируются, чтобы затемнить либо источник, либо пункт назначения. Это позволяет получить ответ в том же виде, в каком он был получен.
Это типичная задача для awk
. Вот одно из возможных решений:
awk '
NR==FNR {
match($0,/.*\$/)
pref = substr($0,RSTART,RLENGTH)
rest = substr($0,RSTART+RLENGTH)
suff = substr(rest, index(rest,"|"))
suffixes[pref] = suff
next
}
{
match($0,/.*\$/)
prefix = substr($0,RSTART,RLENGTH)
match($0,/.*\$[0-9]+|/)
data = substr($0,RSTART,RLENGTH)
if (prefix in suffixes)
print data suffixes[prefix]
}
' file2 file1
где file1
- это тот, который в вашем вопросе назван "входным файлом", а file2
- тот, который в вашем вопросе назван "другим файлом". (Обратите внимание на порядок следования файлов в списке)
Пояснение:
Первый командный блок выполняется при считывании первого файла file2
; это достигается с помощью условия NR==FNR
, которое является истинным только при считывании первого файла. Второй командный блок выполняется только для второго файла file1
(из-за директивы next
в первом командном блоке). Первый блок извлекает префикс префикса
и суффикс суффикс
, а суффикс [префект] = суффикс
запоминает для каждого префикса соответствующий суффикс; это необходимо для обращения к этим данным во втором блоке. Во втором блоке фактически выполняются аналогичные команды по извлечению префикса, а также по его использованию для получения из хранимых суффиксов нужного суффикса. Есть только одно отличие, необходимо также сохранить номер после символа #
в составе новых данных префикса, чтобы была выполнена вторая операция совпадения -
; чтобы отличить префикс, необходимый для доступа к массиву суффиксов -
, от префикса, который нужен в составе результирующих данных.