У меня была та же проблема, и я разработал его. Ваш вопрос помог мне значительно на самом деле. Петлевое туннелирование было приемом.
Был значительный ASA изменения ОС, особенно относительно NAT, в этих 8,3 выпусках. Это - то, что я выполняю, таким образом, вероятно, что синтаксис не будет работать до 8,3. Я не знаю, могли ли Вы даже сделать это до 8,3.
Вот то, как это настраивается. Я буду включать некоторые отрывки конфигурации ниже для резервного копирования этого.
Как Вы, у меня есть ASA между моим граничным маршрутизатором и моей внутренней сетью. У меня только есть один публично адресуемый адрес IPv4. Я смог к трафику протокола 41 NAT между определенным внешним хостом и определенным внутренним узлом с помощью внешнего общедоступного IP-адреса ASA. Туннель завершается на внутреннем узле.
Внутренний узел имеет два интерфейса Ethernet. Один, подключенный к внутренней сети, только IPv4 выполнений. Другой, подключенный к тому же сегменту как внешний интерфейс ASA, только IPv6 выполнений. Существует также туннельный интерфейс для туннеля IPv6. Конфигурация туннеля прибыла непосредственно из Ураганного веб-сайта Electric. Если Вам настроили туннель с ними, они могут показать, что Вы подробно изложили инструкции по конфигурации по крайней мере для 8 различных операционных систем.
ASA использует адрес IPv4 граничного маршрутизатора, поскольку это - маршрут IPv4 по умолчанию. Это использует адрес IPv6 конечной точки туннеля, поскольку это - адрес IPv6 по умолчанию. Внутренние узлы используют ASA в качестве своего маршрута по умолчанию для любой версии, кроме конечной точки туннеля, которая использует ее туннельный интерфейс в качестве значения по умолчанию для IPv6.
Пакеты IPv6 проходят ASA дважды в каждом направлении. Они проходят ASA к конечной точке туннеля, куда они помещаются в туннель, и снова через ASA. И IPv4 и IPv6 извлекают всю пользу брандмауэра ASA.
Реальный прием получал трафик протокола 41 через ASA. Вот части, которые заставили это работать:
object service 6in4
service 41
object network ipv6_remote_endpoint
host x.x.x.x
object network ipv6_local_endpoint
host y.y.y.y
access-list outside_in extended permit object 6in4 object ipv6_remote_endpoint object ipv6_local_endpoint
nat (inside,outside) source static ipv6_local_endpoint interface destination static ipv6_remote_endpoint ipv6_remote_endpoint
Удача с ним!
Ограбить
За одним дефисом может следовать несколько односимвольных флагов. Двойной дефис ставит префикс односимвольного варианта с несколькими символами.
Рассмотрим этот пример:
tar -czf
В этом примере -czf
задает три односимвольных флага: c
, z
и f
.
Теперь рассмотрим другой пример:
tar --exclude
В этом случае - exclude
задает одиночный, многосимвольный параметр с именем exclude
. Двойной дефис устраняет неоднозначность аргумента командной строки, гарантируя, что tar
интерпретирует его как exclude
, а не как комбинацию e
, x
, c
, l
, u
, d
и e
.
Это действительно соглашение. Однако это может помочь синтаксическим анализаторам более эффективно узнать о параметрах, переданных программе.
Кроме того, существуют полезные утилиты, которые могут помочь в синтаксическом анализе этих команд, такие как getopt (3)
или нестандартная getopt_long (3)
для помощи в синтаксическом анализе аргументов программы.
Это хорошо, поскольку мы можем объединить несколько коротких параметров, как говорят другие ответы, например tar -xzf myfile.tar.gz
.
Если был аргумент «Лиза» для ls
, вероятно, тип ls -lisa
будет иметь другое значение, чем ls -lisa
. Первые - это параметры l
, i
, s
и a
, а не слово.
Фактически, вы могли напишите ls -l -i -s -a
, что означает то же самое, что и ls -lisa
, но это будет зависеть от программы.
Существуют также программы, которые не поддерживают не соблюдайте это соглашение. В первую очередь для моего зрения, dd
и gcc
.
Все зависит от программы. Обычно «-» используется для «коротких» параметров (одна буква, -h), а «-» используется для «длинных» (er) параметров (--help).
Короткие параметры обычно можно комбинировать (поэтому «-h -a» то же самое, что «-ha»)
В Unix-подобных системах дефис ASCII – минус обычно используется для указания параметров. За символом обычно следует одна или несколько букв. Аргумент, который представляет собой один дефис - минус сам по себе без каких-либо букв, обычно указывает, что программа должна обрабатывать данные, поступающие со стандартного ввода, или отправлять данные на стандартный вывод. Два символа дефиса – минус (-) используются в некоторых программах для указания «длинных параметров», где используются более информативные имена параметров. Это обычная особенность программного обеспечения GNU.
короткие параметры с одним тире и длинные параметры с двойным тире
короткие параметры можно объединить в один аргумент;
for example: ls -lrt #instead of ls -l -r -t
Если мы разрешаем длинные варианты с одним тире, это вызывает двусмысленность. Чтобы решить эту проблему, мы используем двойное тире для длинных опций.
В другом случае, когда сценарий вызывает другую программу, может потребоваться отделить параметры первого сценария от параметров, переданных второй программе. Например, вы можете написать функцию bash для разбора командной строки, аналогичную функции ниже. Затем используйте командную строку, аналогичную следующей. В этом случае двойные дефисы отделяют опции для каждой программы и позволяют встроенному парсеру обрабатывать ошибки, как задумано. Конечно, могут быть особые случаи, которые необходимо будет обработать.
firstscript --firstScriptOption -- --optForSecondProgram
# Parse the command line and set variables to control logic.
parseCommandLine() {
local additionalOpts exitCode optstring optstringLong
# Indicate specification for single character options:
# - 1 colon after an option indicates that an argument is required
# - 2 colons after an option indicates that an argument is optional, must use -o=argument syntax
optstring="h"
# Indicate specification for long options:
# - 1 colon after an option indicates that an argument is required
# - 2 colons after an option indicates that an argument is optional, must use --option=argument syntax
optstringLong="help"
# Parse the options using getopt command:
# - the -- is a separator between getopt options and parameters to be parsed
# - output is simple space-delimited command line
# - error message will be printed if unrecognized option or missing parameter but status will be 0
# - if an optional argument is not specified, output will include empty string ''
GETOPT_OUT=$(getopt --options ${optstring} --longoptions ${optstringLong} -- "$@")
exitCode=$?
if [ ${exitCode} -ne 0 ]; then
# Call a separate function to print usage.
printUsage
exit 1
fi
# The following constructs the command by concatenating arguments:
# - the $1, $2, etc. variables are set as if typed on the command line
# - special cases like --option=value and missing optional arguments are generically handled
# as separate parameters so shift can be done below
eval set -- "${GETOPT_OUT}"
# Loop over the options:
# - the error handling will catch cases were argument is missing
# - shift over the known number of options/arguments
while true; do
#echo "Command line option is ${opt}"
case "$1" in
-h|--help) # Print usage of this script
printUsage
shift
;;
--) # No more arguments - following arguments are passed to the second program.
shift
break
;;
*) # Unknown option - will never get here because getopt catches up front
# and remaining options are after --
echo "Invalid option $1." >&2
printUsage
exit 1
;;
esac
done
# Get a list of all command line options that do not correspond to dash options:
# - These are "non-option" arguments after --
# - For example, one or more file or folder names that need to be processed.
# - If multiple values, they will be delimited by spaces.
# - Command line * will result in expansion to matching files and folders.
shift $((OPTIND-1))
additionalOpts=$*
echo "Additional options: ${additionalOpts}"
# The additional options would be passed to the second program.
}