GNU/Linux >> Belajar Linux >  >> Linux

Linux – Lalu Lintas Keluaran Pada Antarmuka Berbeda Berdasarkan Port Tujuan?

Pertanyaan saya pada dasarnya sama dengan Hanya izinkan lalu lintas keluar tertentu pada antarmuka tertentu.

Saya memiliki dua antarmuka eth1 (10.0.0.2) dan wlan0 (192.168.0.2).
Rute default saya adalah untuk eth1 .
Katakanlah saya ingin semua lalu lintas https melalui wlan0 .
Sekarang jika saya menggunakan solusi yang disarankan dalam pertanyaan lain, lalu lintas https akan melalui wlan0 , tetapi akan tetap memiliki alamat sumber eth1 (10.0.0.2). Karena alamat ini tidak dapat dirutekan untuk wlan0 gateway, jawaban tidak akan pernah kembali. Cara mudahnya adalah dengan mengatur bind-addr dengan benar di aplikasi, tetapi dalam hal ini tidak berlaku.

Saya pikir saya perlu menulis ulang src-addr:

# first mark it so that iproute can route it through wlan0
iptables -A OUTPUT -t mangle -o eth1 -p tcp --dport 443 -j MARK --set-mark 1
# now rewrite the src-addr
iptables -A POSTROUTING -t nat -o wlan0 -p tcp --dport 443 -j SNAT --to 192.168.0.2

Sekarang tcpdump melihat paket keluar baik-baik saja dan paket masuk tiba untuk 192.168.0.2, namun mereka mungkin tidak pernah berakhir di aplikasi, karena semua yang pernah saya lihat, adalah bahwa aplikasi mengirim ulang paket SYN, meskipun SYN- ACK sudah diterima.

Jadi saya pikir, mungkin saya perlu menulis ulang alamat masuk juga:

iptables -A PREROUTING -t nat -i wlan0 -p tcp --sport 443 -j DNAT --to 10.0.0.2

tapi itu tidak berhasil juga. Jadi saya agak terjebak di sini. Ada saran?

Jawaban yang Diterima:

Anda sudah dekat.

Alasan sebenarnya mengapa aplikasi tidak melihat lalu lintas kembali adalah karena perlindungan spoofing IP bawaan kernel. Yaitu, lalu lintas kembali tidak cocok dengan tabel perutean dan karena itu dijatuhkan. Anda dapat memperbaikinya dengan menonaktifkan perlindungan spoofing seperti ini:

sudo sysctl net.ipv4.conf.wlan0.rp_filter=0

Tapi saya tidak akan merekomendasikannya. Cara yang lebih tepat adalah dengan membuat instance perutean alternatif.

  1. Tanda itu diperlukan. Simpan.
  2. Sumber NAT juga diperlukan.
  3. DNAT terakhir tidak diperlukan, jadi Anda dapat menghapusnya.

Pastikan Anda memiliki iproute paket diinstal. Jika Anda memiliki ip perintah maka Anda sudah siap (yang sepertinya Anda lakukan, tetapi jika tidak mendapatkannya terlebih dahulu).

Edit /etc/iproute2/rt_tables dan tambahkan tabel baru dengan menambahkan baris berikut:

200 wlan-route

Anda kemudian perlu mengonfigurasi tabel perutean baru bernama wlan-route dengan gateway default dan membuat aturan untuk mengirim lalu lintas ke tabel itu secara kondisional. Saya akan menganggap gateway default Anda adalah 192.168.0.1. Tentu ini harus sesuai dengan jaringan Anda yang sebenarnya, dan bukan hanya asumsi saya.

ip route add default via 192.168.0.1 dev wlan0 table wlan-route
ip rule add fwmark 0x1 table wlan-route

Skrip beranotasi terakhir Anda akan terlihat seperti ini:

# Populate secondary routing table
ip route add default via 192.168.0.1 dev wlan0 table wlan-route
# Anything with this fwmark will use the secondary routing table
ip rule add fwmark 0x1 table wlan-route
# Mark these packets so that iproute can route it through wlan-route
iptables -A OUTPUT -t mangle -o eth1 -p tcp --dport 443 -j MARK --set-mark 1
# now rewrite the src-addr
iptables -A POSTROUTING -t nat -o wlan0 -p tcp --dport 443 -j SNAT --to 192.168.0.2

Linux
  1. Linux – Berbagai Format File Objek Di Linux?

  2. Linux – Apakah Kernel Linux/unix yang Berbeda Dapat Dipertukarkan?

  3. Contoh Perintah Waktu Linux

  1. Linux SCP mendefinisikan port tujuan

  2. Lalu lintas keluaran pada antarmuka yang berbeda berdasarkan port tujuan

  3. Android - Apakah Android berbasis Linux?

  1. Linux – Port Serial Raspberrypi?

  2. Linux – Output Dari Ps Lstart Berubah?

  3. Kehabisan port jaringan Linux