LINUX.ORG.RU
решено ФорумAdmin

Недоступен сервер по адресу интерфейса wireguard из lan

 , , ,


0

1

Добрый день.

Имеется сервер1 на арче с интерфейсами:
enp1s0 (WAN, 192.168.100.3)
enp2s0 (LAN, 10.128.10.0/24)
wg-client (10.0.0.3, подключен к серверу2,10.0.0.1 на VPS)

Настроен роутинг всего трафика через wg-client: «default via 10.0.0.1 dev wg-client», а также «AllowedIPs = 0.0.0.0/0» в конфиге wireguard. Форвардинг ipv4, разумеется, включен.

iptables:
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i enp2s0 -o enp1s0 -j ACCEPT
-A FORWARD -i enp2s0 -o wg-client -j ACCEPT
-A POSTROUTING -o enp1s0 -j MASQUERADE
-A POSTROUTING -o wg-client -j MASQUERADE

ip route:
default via 10.0.0.1 dev wg-client 
10.0.0.0/24 dev wg-client scope link src 10.0.0.3 
10.128.10.0/24 dev enp2s0 proto kernel scope link src 10.128.10.1 
[vps wan ip] via 192.168.100.1 dev enp1s0 proto static onlink 
192.168.100.0/24 dev enp1s0 proto dhcp scope link src 192.168.100.3 metric 202 
192.168.100.1 dev enp1s0 proto dhcp scope link src 192.168.100.3 metric 1024

ip address:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 40:62:31:01:70:77 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.3/24 brd 192.168.100.255 scope global dynamic enp1s0
       valid_lft 7532sec preferred_lft 5732sec
    inet6 fe80::2f5f:c023:d7a4:b157/64 scope link 
       valid_lft forever preferred_lft forever
    inet6 fe80::4262:31ff:fe01:7077/64 scope link 
       valid_lft forever preferred_lft forever
3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 40:62:31:01:70:78 brd ff:ff:ff:ff:ff:ff
    inet 10.128.10.1/24 brd 10.128.10.255 scope global enp2s0
       valid_lft forever preferred_lft forever
    inet6 fe80::89c6:fa37:e3e1:1850/64 scope link 
       valid_lft forever preferred_lft forever
4: wlp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 30:3a:64:b9:43:30 brd ff:ff:ff:ff:ff:ff
5: wg-client: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1360 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none 
    inet 10.0.0.3/32 scope global wg-client
       valid_lft forever preferred_lft forever

wireguard на VPS:
[Interface]
Address = 10.0.0.1/24
MTU = 1360
SaveConfig = true
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
ListenPort = 51820
PrivateKey = privatekey
[Peer]
PublicKey = publickey
AllowedIPs = 10.0.0.3/32

wireguard на сервере1:
[Interface]
PrivateKey = privatekey
Address = 10.0.0.3/32
MTU = 1360
PostUp = ip route add default via 10.0.0.1 dev wg-client
[Peer]
PublicKey = publickey
AllowedIPs = 0.0.0.0/0
Endpoint = [vps wan ip]:51820
PersistentKeepalive = 25

Всё замечательно работает, кроме одной досадной мелочи - сервер1 недоступен из LAN по адресу 10.0.0.3.
При этом он доступен по адресам LAN 10.128.10.1 и WAN 192.168.100.3. И даже 10.0.0.1 пингуется из локалки.
До wireguard таким же образом был настроен softether, и его интерфейс был доступен.

Объясню для чего это вообще нужно — чтобы можно было по одному адресу (10.0.0.3) получить доступ к ресурсам сервера1 и из LAN, и из любого другого места, подключившись по wireguard к серверу2.

Ответ на: комментарий от anc

Правила в iptables ?

Только эти

*filter
:INPUT ACCEPT [21186:19265125]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [18708:4896555]
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i enp2s0 -o enp1s0 -j ACCEPT
-A FORWARD -i enp2s0 -o wg-client -j ACCEPT
COMMIT

*nat
:PREROUTING ACCEPT [589:42354]
:INPUT ACCEPT [411:31650]
:OUTPUT ACCEPT [250:19283]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o enp1s0 -j MASQUERADE
-A POSTROUTING -o wg-client -j MASQUERADE
COMMIT

linuxoid14 ()
Ответ на: комментарий от linuxoid14

На всякий случай посмотрите cat /proc/sys/net/ipv4/conf/*/rp_filter но это с горя. Все что мог предположить, предположил, больше фантазии не хватает. Сам wg не щупал :(

anc ★★★★★ ()
Ответ на: комментарий от anc

У всех интерфейсов rp_filter = 2

~> cat /proc/sys/net/ipv4/conf/wg-client/rp_filter
2
Установка значения «0» не помогает.

Я не уверен, что загвоздка именно в wg, но факт в том, что softether с точно такими же настройками был доступен из локалки.

linuxoid14 ()
Ответ на: комментарий от anc

Вопрос снят

Посыпаю голову пеплом, wg-quick при старте добавляет вот это:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DROP       all  --  0.0.0.0/0            10.0.0.3             ADDRTYPE match src-type !LOCAL /* wg-quick(8) rule for wg-client */

Спасибо за участие.

linuxoid14 ()