내 홈 서버에는 두 가지 기본 인터페이스 eth1(표준 인터넷 연결)와 tun0(OpenVPN 터널)이 있습니다. iptablesUID 1002가 소유 한 로컬 프로세스에서 생성 된 모든 패킷을 강제 종료 tun0하고 다른 모든 패킷은 강제 종료하는 데 사용하고 싶습니다 eth1.
일치하는 패킷을 쉽게 표시 할 수 있습니다.
iptables -A OUTPUT -m owner --uid-owner 1002 -j MARK --set-mark 11
이제 POSTROUTING 체인 (아마도 mangle 테이블)에 11로 표시된 패킷을 일치시키고을 보내고 tun0모든 패킷과 일치하고을 보내는 규칙을 규칙에 추가하고 싶습니다 eth1.
ROUTE 대상을 찾았지만 소스 인터페이스를 잘못 작성하지 않는 한 소스 인터페이스 만 다시 작성하는 것 같습니다.
iptables가 가능합니까? 대신 라우팅 테이블을 사용 ip route하거나 레거시 route명령을 통해 엉망으로 만들어야 합니까?
편집 : 더 많은 정보를 제공해야한다고 생각했습니다. 현재 다른 iptables 규칙이 없습니다 (향후 관련없는 작업을 수행하기위한 규칙을 만들 수는 있지만). 또한 출력 ip route은 다음과 같습니다.
default via 192.168.1.254 dev eth1 metric 203
10.32.0.49 dev tun0 proto kernel scope link src 10.32.0.50
85.17.27.71 via 192.168.1.254 dev eth1
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.73 metric 203
나는 라우팅 테이블을 건드리지 않았습니다. 이것은 현재의 상태입니다 (꽤 더러워 보이지만). 죄송하지만 route이 컴퓨터에 레거시 명령이 설치되어 있지 않습니다 .
그리고 ip addreth0과 eth2 의 출력은 무시할 수 있습니다-현재 사용되지 않는 NIC입니다.
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 1c:6f:65:2a:73:3f brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:1b:21:9d:4e:bb brd ff:ff:ff:ff:ff:ff
inet 192.168.1.73/24 brd 192.168.1.255 scope global eth1
inet6 fe80::21b:21ff:fe9d:4ebb/64 scope link
valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 00:1b:21:6a:c0:4b brd ff:ff:ff:ff:ff:ff
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
link/none
inet 10.32.0.50 peer 10.32.0.49/32 scope global tun0
편집 : 약간의 효과가 있지만 표시된 패킷을 tun0으로 전달하지 않습니다. 기본적으로 표 (11)을 추가하고 다음을 사용했습니다.
ip route add table 11 via 10.32.0.49 dev tun0
ip rule add priority 10000 fwmark 11 table 11
방금했을 때 sudo -u user1000 wget -qO- whatismyip.org집의 외부 IP 주소를 얻지 만,한다면 sudo -u user1002 wget -qO- whatismyip.org집의 IP 주소도 얻습니다 (그러나 OpenVPN 터널의 다른 쪽 끝에서 IP를 가져와야합니다).
Running iptables -vL은 패킷이 표시 규칙과 일치하는지 확인하지만 라우팅 규칙을 따르지 않는 것으로 보입니다.
편집 : 나는 이것에 오랜 시간을 보냈는데 여전히 작동하지 않지만 조금 더 가깝다고 생각합니다.
iptables 규칙은 mangle테이블의 OUTPUT 체인 에 있어야 합니다. nat소스 주소를 설정하려면 테이블의 POSTROUTING 체인 에 MASQUERADE 규칙이 필요하다고 생각 합니다. 그러나 OUTPUT의 맹글이 발생한 후 발생하는 재 라우팅이 올바르게 작동하지 않습니다.
나는 지금 이것에 5 시간을 보냈으므로 휴식을 취하고 오늘 밤이나 내일 언젠가 다시 돌아올 것입니다.