Server rumah saya memiliki dua antarmuka utama, eth1
(koneksi internet standar) dan tun0
(terowongan OpenVPN). Saya ingin menggunakan iptables
untuk memaksa semua paket yang dihasilkan oleh proses lokal yang dimiliki oleh UID 1002 untuk keluar tun0
, dan semua paket lain untuk keluar eth1
.
Saya dapat dengan mudah menandai paket yang cocok:
iptables -A OUTPUT -m owner --uid-owner 1002 -j MARK --set-mark 11
Sekarang, saya ingin meletakkan beberapa aturan dalam rantai POSTROUTING (mungkin dari tabel mangle) untuk mencocokkan paket yang ditandai dengan 11 dan mengirimkannya ke tun0
, diikuti oleh aturan yang cocok dengan semua paket dan mengirimkannya ke eth1
.
Saya menemukan target ROUTE, tetapi sepertinya hanya menulis ulang antarmuka sumber (kecuali saya membacanya dengan salah).
Apakah iptables mampu melakukan ini? Apakah saya harus main-main dengan tabel routing (via ip route
atau hanya route
perintah legacy ) saja?
Sunting: Saya pikir mungkin saya harus memberikan informasi lebih lanjut. Saya tidak memiliki aturan iptables lain saat ini (walaupun saya dapat membuat beberapa aturan untuk melakukan tugas yang tidak terkait di masa depan). Juga, output dari ip route
adalah:
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
Saya belum menyentuh tabel routing - ini hanya bagaimana saat ini (walaupun terlihat cukup kotor). Maaf, tetapi saya tidak memiliki route
perintah warisan yang diinstal pada mesin ini.
Dan output dari ip addr
(tentu saja, eth0 dan eth2 dapat diabaikan - mereka adalah NIC yang tidak digunakan saat ini):
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
Sunting: Saya mendapatkan sesuatu yang berfungsi, tetapi tidak meneruskan paket yang ditandai ke tun0. Pada dasarnya, saya menambahkan tabel (11), dan menggunakan:
ip route add table 11 via 10.32.0.49 dev tun0
ip rule add priority 10000 fwmark 11 table 11
Ketika saya baru saja sudo -u user1000 wget -qO- whatismyip.org
, saya mendapatkan alamat IP eksternal rumah saya, tetapi jika saya melakukannya sudo -u user1002 wget -qO- whatismyip.org
, saya juga mendapatkan alamat IP rumah saya (tetapi saya harus mendapatkan IP di ujung lain terowongan OpenVPN).
Menjalankan iptables -vL
mengonfirmasi bahwa paket-paket tersebut dicocokkan dengan aturan penandaan, tetapi mereka tampaknya tidak mengikuti aturan perutean.
EDIT: Saya sudah menghabiskan waktu yang lama untuk ini, dan meskipun masih tidak berhasil, saya pikir saya sedikit lebih dekat.
Aturan iptables harus dalam mangle
rantai OUTPUT tabel. Saya pikir saya juga membutuhkan aturan MASQUERADE di nat
rantai POSTROUTING tabel, untuk mengatur alamat sumber. Namun, perutean ulang yang terjadi setelah kicau OUTPUT tidak berfungsi dengan benar.
Saya telah menghabiskan 5 jam untuk hal ini sekarang, jadi saya beristirahat dan mungkin akan kembali lagi nanti malam atau besok.