Bonjour,

Je me disais qu'un gourou de la table IP pourrait peut être m'aider.
Je veux faire du split VPN sur une machine pour qu'un user passe obligatoirement par le VPN pour le trafic externe et que les autres users soient hors VPN.

Je suis ce totu qui fonctionne bien, a part que tout le trafic local du user sous VPN est bloqué.
Je pense que ça vient de ce script:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#! /bin/bash
# Niftiest Software – www.niftiestsoftware.com
# Modified version by HTPC Guides – www.htpcguides.com
 
export INTERFACE="tun0"
export VPNUSER="vpn"
export LOCALIP="192.168.1.130"
export NETIF="eth0"
 
# flushes all the iptables rules, if you have other rules to use then add them into the script
iptables -F -t nat
iptables -F -t mangle
iptables -F -t filter
 
# mark packets from $VPNUSER
iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark
iptables -t mangle -A OUTPUT ! --dest $LOCALIP -m owner --uid-owner $VPNUSER -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT --dest $LOCALIP -p udp --dport 53 -m owner --uid-owner $VPNUSER -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT --dest $LOCALIP -p tcp --dport 53 -m owner --uid-owner $VPNUSER -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT ! --src $LOCALIP -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT -j CONNMARK --save-mark
 
# allow responses
iptables -A INPUT -i $INTERFACE -m conntrack --ctstate ESTABLISHED -j ACCEPT
 
# block everything incoming on $INTERFACE to prevent accidental exposing of ports
iptables -A INPUT -i $INTERFACE -j REJECT
 
# let $VPNUSER access lo and $INTERFACE
iptables -A OUTPUT -o lo -m owner --uid-owner $VPNUSER -j ACCEPT
iptables -A OUTPUT -o $INTERFACE -m owner --uid-owner $VPNUSER -j ACCEPT
 
# all packets on $INTERFACE needs to be masqueraded
iptables -t nat -A POSTROUTING -o $INTERFACE -j MASQUERADE
 
# reject connections from predator IP going over $NETIF
iptables -A OUTPUT ! --src $LOCALIP -o $NETIF -j REJECT
 
# Start routing script
/etc/openvpn/routing.sh
 
exit 0
Et plus particulièrement de la règle:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
# reject connections from predator IP going over $NETIF
iptables -A OUTPUT ! --src $LOCALIP -o $NETIF -j REJECT
J'aimerais modifier ces règles pour qu'idéalement le trafic local (192.168.1.0/24) soit autorisé ou minimalement que les ports 18880 et 10071 restent libre.
Je me débrouille un peu sous Linux, mais là je suis pas trop sur. Il me semble que les règles sont suivies de la plus restrictive à la plus générale.
Si je me trompe pas, ça veut dire que je peut ajouter une règle qui dit explicitement que le trafic local est autorisé. Un truc du genre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
iptables -A OUTPUT -o 192.168.1.130 -d 192.168.1.0/24 -m owner --uid-owner $VPNUSER -j ACCEPT
Bon forcément, cette ligne est fausse, je sais pas trop où la mettre, ni comment la tester proprement.
C'est pourquoi toute aide sera grandement appréciée et je vous remercie d'avance !