Client: advertise LAN subnets via peer AllowedIPs
This commit is contained in:
@@ -14,6 +14,7 @@ CLIENT_NAME=""
|
||||
CLIENT_DNS=""
|
||||
TUNNEL_MODE=""
|
||||
SPLIT_ALLOWED_IPS=""
|
||||
ADVERTISE_SUBNETS=""
|
||||
|
||||
SERVER_HOST=""
|
||||
SERVER_USER="root"
|
||||
@@ -40,6 +41,7 @@ usage() {
|
||||
--allowed-ips <cidr,cidr> Для режима split
|
||||
--dns <ip> DNS для клиента (если не задан, берется с сервера)
|
||||
--client-address-prefix <1-32> Префикс маски адреса интерфейса клиента (по умолчанию: 24)
|
||||
--advertise-subnets <cidr,...> Сети за клиентом, которые нужно маршрутизировать через него (например 192.168.33.0/24)
|
||||
|
||||
--server-host <host> IP/домен WireGuard-сервера
|
||||
--server-user <user> SSH-пользователь (по умолчанию: root)
|
||||
@@ -75,6 +77,8 @@ parse_args() {
|
||||
CLIENT_DNS="$2"; shift 2 ;;
|
||||
--client-address-prefix)
|
||||
CLIENT_ADDRESS_PREFIX="$2"; shift 2 ;;
|
||||
--advertise-subnets)
|
||||
ADVERTISE_SUBNETS="$2"; shift 2 ;;
|
||||
--server-host)
|
||||
SERVER_HOST="$2"; shift 2 ;;
|
||||
--server-user)
|
||||
@@ -100,6 +104,9 @@ validate_inputs() {
|
||||
[[ "$TUNNEL_MODE" == "full" || "$TUNNEL_MODE" == "split" ]] || die "--mode должен быть full или split"
|
||||
[[ "$CLIENT_ADDRESS_PREFIX" =~ ^[0-9]+$ ]] || die "--client-address-prefix должен быть числом 1..32"
|
||||
((CLIENT_ADDRESS_PREFIX >= 1 && CLIENT_ADDRESS_PREFIX <= 32)) || die "--client-address-prefix должен быть в диапазоне 1..32"
|
||||
if [[ -n "$ADVERTISE_SUBNETS" ]]; then
|
||||
is_valid_cidr_list "$ADVERTISE_SUBNETS" || die "Некорректный список --advertise-subnets"
|
||||
fi
|
||||
|
||||
if [[ -z "$SERVER_HOST" ]]; then
|
||||
die "Не указан --server-host"
|
||||
@@ -230,6 +237,9 @@ register_peer_on_server() {
|
||||
psk="$(cat "$CLIENT_PSK_PATH")"
|
||||
|
||||
remote_cmd="/usr/local/sbin/wg-peerctl add --client-name '${CLIENT_NAME}' --client-public-key '${pub}' --client-preshared-key '${psk}' --persistent-keepalive '${KEEPALIVE}'"
|
||||
if [[ -n "$ADVERTISE_SUBNETS" ]]; then
|
||||
remote_cmd+=" --client-routes '${ADVERTISE_SUBNETS}'"
|
||||
fi
|
||||
response="$(run_ssh "$remote_cmd")"
|
||||
|
||||
SERVER_RESPONSE_RAW="$response"
|
||||
@@ -346,6 +356,7 @@ Endpoint сервера: ${SERVER_ENDPOINT}
|
||||
Режим туннеля: ${TUNNEL_MODE}
|
||||
SSH сервер: ${SERVER_USER}@${SERVER_HOST}:${SSH_PORT}
|
||||
Статус регистрации: ${SERVER_STATUS}
|
||||
Сети за клиентом: ${ADVERTISE_SUBNETS:-не объявлены}
|
||||
Лог: ${LOG_FILE}
|
||||
=================================================
|
||||
EOF_SUMMARY
|
||||
|
||||
Reference in New Issue
Block a user