Настраиваем шлюз для маршрутизации по списку доступа.
маршрутизация с помощью 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
создаём скрипт и список сайтов.