Содержание

Настраиваем шлюз для маршрутизации по списку доступа.

маршрутизация с помощью Iptables, списки доступа ipset, получение ip поддоменов *.googlevideo.com или других из списка доступов - tshark (извлечение заголовков).

включаем шлюз:

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

устанавливаем необходимые пакеты: iptables ipset tshark

на wire-in конфиг /etc/wireguard/wg0.conf

root@p621665:~# cat /etc/wireguard/wg0.conf
[Interface]
PrivateKey = [WG-IN privatekey]
Address = 10.0.0.1/24
ListenPort = 51820

PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = [WG-OUT publickey]
AllowedIPs = 10.0.0.2/32, 192.168.31.5/32  # IP proxy-wireguard-gate в туннеле и локальный IP
PersistentKeepalive = 25
root@p621665:~#

Генерируем приватный ключ:

wg genkey > privatekey
Генерируем публичный ключ на основе приватного:
wg pubkey < privatekey > publickey
или
wg genkey | tee privatekey | wg pubkey > publickey

Конфиг шлюза:

[Interface]
PrivateKey = [host privatekey]
Address = 10.0.0.2/24
ListenPort = 51820

[Peer]
PublicKey = [peer public]
AllowedIPs = 0.0.0.0/0  # Весь трафик будет идти через туннель (пока iptables не вмешается)
Endpoint = 109.120.141.194:51820
PersistentKeepalive = 25

Тестируем туннель:

wg-quick down wg0
wg-quick up wg0
на обоих хостах
wg
чекаем latest handshake

Если всё работает, то:

systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0

Настраиваем маршрутизацию для клиентов на шлюзе

echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/99-forward.conf

iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE

Сохраняем конфиг.

apt install iptables-persistent
Можно заребутиться для проверки.

Всё, в данный момент шлюз работает, гоняя всё через тоннель. Приступаем к настройке алгоритма, чтобы только указанные сайты шли через тоннель, по списку.

Настройка логики

mkdir /etc/iproute2
создаём таблицу маршрутизации
echo 200 vpn >> /etc/iproute2/rt_tables
добавляем маршрут по этой таблице
ip route add default dev wg0 table vpn
проверяем:
#ip route show table vpn
должно быть: default dev wg0 scope link

добавляем правило для пометки пакетов:

iptables -t mangle -A PREROUTING -m set --match-set vpn_sites dst -j MARK --set-mark 42
разбор команды

добавляем правило, чтобы помеченные пакеты шли через таблицу vpn:

ip rule add fwmark 42 table vpn

проверяем, что у нас за правила на mangle:

sudo iptables -t mangle -L -v -n --line-numbers
чтобы удалить дубликаты (если есть):
iptables -t mangle -D POSTROUTING 2<code>
добавляем NAT для пакетов с меткой "42"
<code>iptables -t nat -A POSTROUTING -m mark --mark 42 -o wg0 -j MASQUERADE

теперь заполняем таблицу vpn айпишниками нужных сайтов.

apt install dnsutils
(нам понадобится команда dig для извлечения всех ip из адреса)
apt install ipset
создаём скрипт и список сайтов.

DokuWiki Appliance - Powered by TurnKey Linux