Назад | Перейти на главную страницу

Невозможно настроить WireGuard для использования вторичного IP-адреса вместо основного IP-адреса сервера

Установка

Основной интерфейс Ethernet моего сервера enp8s0, имеет один общедоступный IP-адрес (116.202.221.254- основной IP-адрес сервера), и вот как он настраивается.

# ip addr show enp8s0

2: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether a8:a1:59:06:e6:6c brd ff:ff:ff:ff:ff:ff
    inet 116.202.221.254/26 brd 116.202.221.255 scope global enp8s0
       valid_lft forever preferred_lft forever
    inet6 2a01:4f8:241:55c1::2/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::aaa1:59ff:fe06:e66c/64 scope link 
       valid_lft forever preferred_lft forever

Маршрут:

# ip route show

default via 116.202.221.193 dev enp8s0 onlink 
10.103.213.2 dev wg0 scope link 
116.202.221.192/26 via 116.202.221.193 dev enp8s0 
116.202.221.192/26 dev enp8s0 proto kernel scope link src 116.202.221.254 

Содержание файла: /etc/network/interfaces

auto lo
iface lo inet loopback
iface lo inet6 loopback

auto enp8s0
iface enp8s0 inet static
  address 116.202.221.254
  netmask 255.255.255.192
  gateway 116.202.221.193
  # route 116.202.221.192/26 via 116.202.221.193
  up route add -net 116.202.221.192 netmask 255.255.255.192 gw 116.202.221.193 dev enp8s0

iface enp8s0 inet6 static
  address 2a01:4f8:241:55c1::2
  netmask 64
  gateway fe80::1

Затем я запросил дополнительный публичный IP-адрес (116.202.221.202) для моего сервера, и вот как я его настроил.

Добавьте дополнительный IP-адрес к основному интерфейсу / устройству enp8s0:

# ip address add 116.202.221.202/32 dev enp8s0

Добавьте эти строки в конфигурацию enp8s0 в /etc/network/interfaces:

up ip address add 116.202.221.202/32 dev enp8s0
down ip address del 116.202.221.202/32 dev enp8s0

Примените изменения с немедленным вступлением в силу:

# ip address flush enp8s0 && systemctl restart networking

Проблема

Весь интернет-трафик, исходящий с сервера, похоже, идет через основной IP-адрес. 116.202.221.254. Так, например, если я просматриваю Интернет через сервер, мой IP-адрес будет отображаться как 116.202.221.254.

Поэтому, даже если я настрою свои инструменты на использование дополнительного / вторичного IP-адреса 116.202.221.202 они, кажется, выходят из 116.202.221.254.

Как мне настроить мой сервер так, чтобы два IP-адреса обрабатывались индивидуально (не были связаны, как сейчас) и имели отдельные маршруты?

Контекст

У меня есть сайт на сервере, использующий основной IP-адрес 116.202.221.254.

Я пытаюсь настроить WireGuard VPN на сервере (для защиты моей личности и преодоления цензуры) для использования вторичного IP-адреса 116.202.221.202 но вместо этого после настройки и настройки я все еще смотрю в Интернет как 116.202.221.254.

Как настроить сервер так, чтобы моя VPN использовала 116.202.221.202 вместо?


Моя конфигурация WireGuard VPN

(Для большего контекста. Я последовал этому руководству: https://www.linode.com/docs/networking/vpn/set-up-wireguard-vpn-on-debian/)

Конфигурация сервера WireGuard: /etc/wireguard/wg0.conf

[Interface]
PrivateKey = SERVER_PRIVATE_KEY
Address = 10.103.213.1/32
ListenPort = 51208
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o enp8s0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enp8s0 -j MASQUERADE
SaveConfig = false

# Macbook Pro
[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.103.213.2/32

Конфигурация клиента WireGuard: /etc/wireguard/wg0.conf

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.103.213.2/32
ListenPort = 51208
DNS = 8.8.8.8, 8.8.4.4, 1.1.1.1

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = 116.202.221.202:51208
AllowedIPs = 0.0.0.0/0

Что мне не хватает? Как это исправить?

Я изо всех сил старался понять каждый шаг, но это все еще много, и я знаю, что упускаю что-то, связанное с iptables маршруты или правила. Но соответствующую информацию в Интернете очень сложно проанализировать, учитывая мои текущие знания, и я не смог найти решение, несмотря на то, что работал над этим в течение 2 дней.

Любая помощь приветствуется. Пожалуйста, постарайтесь дать как можно более подробную информацию. Спасибо!

Если само приложение не указывает системе, через какой IP-адрес должен проходить исходящий трафик, сервер будет использовать IP-адрес по умолчанию (основной) - по крайней мере, в моем понимании.

И поскольку похоже, что в WireGuard нет настройки, чтобы указать ему использовать определенный общедоступный IP-адрес, нам нужно полагаться на iptables или ip route.

Добрая душа на #wireguard Канал IRC помог мне с PostUp и PostDown ценности в wg0.conf конфигурация сервера, которая выполнит то, что мне нужно.

PostUp = iptables -t nat -A POSTROUTING -m mark --mark 0xCA6C/0xFFFFFFFF -j SNAT --to-source 116.202.221.202; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -s 10.103.213.0/24 -o enp8s0 -j SNAT --to-source 116.202.221.202

Post Down = iptables -t nat -D POSTROUTING -m mark --mark 0xCA6C/0xFFFFFFFF -j SNAT --to-source 116.202.221.202; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -s 10.103.213.0/24 -o enp8s0 -j SNAT --to-source 116.202.221.202

Это тоже работает, но НЕ ИДЕАЛЬНО, как мне сказали ( --mark в приведенных выше командах может нацеливаться на трафик, специфичный для WG, в то время как они зависят от исходного IP-адреса - по крайней мере, так я это понял):

PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -s 10.103.213.0/24 -o enp8s0 -j SNAT --to-source 116.202.221.202; iptables -A FORWARD -o wg0 -j ACCEPT

PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -s 10.103.213.0/24 -o enp8s0 -j SNAT --to-source 116.202.221.202; iptables -D FORWARD -o wg0 -j ACCEPT