내 홈 서버에는 두 가지 기본 인터페이스 eth1
(표준 인터넷 연결)와 tun0
(OpenVPN 터널)이 있습니다. iptables
UID 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 addr
eth0과 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 시간을 보냈으므로 휴식을 취하고 오늘 밤이나 내일 언젠가 다시 돌아올 것입니다.