Я пытаюсь перенаправить сетевой трафик для определенной учетной записи пользователя (vpnnet) на сервер OpenVPN. Туннель работает нормально, когда подтягивается маршрут по умолчанию, но я не хочу направлять весь трафик через VPN, только для процессов, запущенных с заданным UID. Поэтому я отключил автоматическое подтягивание маршрута по умолчанию и получил следующее:
iptables -t mangle -A ВЫВОД -m owner --uid-owner vpnnet -j MARK --set-mark 42
ip route добавить по умолчанию через 10.1.1.1 таблица 42
ip правило добавить fwmark 42 таблица 42
iptables -t nat -A POSTROUTING -o tun0 -m mark --mark 42 -j SNAT --to-source 10.1.1.100
Местный адрес 10.1.1.100
и 10.1.1.1
является удаленным шлюзом.
ifconfig
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
инет 10.1.1.100 сетевая маска 255.255.255.0 пункт назначения 10.1.1.100
inet6 ****::****::****::****::**** prefixlen 64 scopeid 0x20<link>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC)
Пакеты RX 128 байт 10032 (9,7 КиБ)
Ошибки RX 0 отброшено 0 переполнение 0 кадр 0
Пакеты TX 108 байт 8832 (8,6 КиБ)
Ошибки передачи 0 отброшено 0 превышение пропускной способности 0 несущей 0 коллизий 0
IP-маршрут показать
по умолчанию через 172.31.1.1 dev eth0 proto dhcp metric 100
10.1.1.0/24 dev tun0 proto kernel scope link src 10.1.1.100 метрика 50
172.31.1.0/24 dev eth0 proto kernel scope link src 172.31.1.100 метрика 100
172.31.1.1 dev eth0 proto static Scope Link метрика 100
ip route показать таблицу 42
по умолчанию через 10.1.1.1 dev tun0
При запуске оболочки под пользователем vpnuser
и пропинговать DNS-сервер Google 8.8.8.8
пинг имеет 100% потерю пакетов. TcpDump показывает, что запросы отправляются, а ответы приходят на правильный интерфейс:
tcpdump -nn -vv -i tun0
tcpdump: прослушивание на tun0, тип ссылки RAW (Raw IP), размер захвата 262144 байт
20:33:28.938772 ip: (tos 0x0, ttl 64, id 7713, смещение 0, флаги [DF], proto ICMP (1), длина 84)
10.1.1.100 > 8.8.8.8: Эхо-запрос ICMP, идентификатор 5078, последовательность 1, длина 64
20:33:29.029533 ip: (tos 0x48, ttl 115, идентификатор 0, смещение 0, флаги [нет], прототип ICMP (1), длина 84)
8.8.8.8 > 10.1.1.100: эхо-ответ ICMP, идентификатор 5078, последовательность 1, длина 64
20:33:29.938962 ip: (tos 0x0, ttl 64, id 7790, смещение 0, флаги [DF], proto ICMP (1), длина 84)
10.1.1.100 > 8.8.8.8: Эхо-запрос ICMP, идентификатор 5078, последовательность 2, длина 64
20:33:30.029685 ip: (tos 0x48, ttl 115, идентификатор 0, смещение 0, флаги [нет], прототип ICMP (1), длина 84)
8.8.8.8 > 10.1.1.100: эхо-ответ ICMP, идентификатор 5078, последовательность 2, длина 64
20:33:30.938838 ip: (tos 0x0, ttl 64, id 8152, смещение 0, флаги [DF], proto ICMP (1), длина 84)
10.1.1.100 > 8.8.8.8: Эхо-запрос ICMP, идентификатор 5078, последовательность 3, длина 64
20:33:31.029179 ip: (tos 0x48, ttl 115, идентификатор 0, смещение 0, флаги [нет], прототип ICMP (1), длина 84)
8.8.8.8 > 10.1.1.100: эхо-ответ ICMP, идентификатор 5078, последовательность 3, длина 64
пинг 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56 (84) байт данных.
^ С
--- 8.8.8.8 статистика пинга ---
12 пакетов передано, 0 получено, 100% потери пакетов, время 11001 мс
Журнал iptables не показывает отброшенных пакетов.
Операционная система CentOS 7.
Я был бы очень благодарен, если бы кто-нибудь мог указать мне правильное направление.