GNU/Linux >> Belajar Linux >  >> Linux

Linux – Bagaimana Cara Meneruskan Lalu Lintas Antara Ruang Nama Jaringan Linux?

Saya dapat menyiapkan namespace jaringan dan memulai server yang mendengarkan 127.0.0.1 di dalam namespace:

# ip netns add vpn
# ip netns exec vpn ip link set dev lo up
# ip netns exec vpn nc -l -s 127.0.0.1 -p 80 &

# ip netns exec vpn netstat -tlpn

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:80            0.0.0.0:*               LISTEN      5598/nc

Setelah itu, saya dapat terhubung ke server di dalam namespace:

# ip netns exec vpn nc 127.0.0.1 80 -zv
localhost [127.0.0.1] 80 (http) open

Tapi saya tidak bisa terhubung ke server di luar namespace:

# nc 127.0.0.1 80
(UNKNOWN) [127.0.0.1] 80 (http) : Connection refused

Bagaimana cara mengkonfigurasi iptables atau namespace untuk meneruskan lalu lintas dari namespace global ke namespace vpn?

Jawaban yang Diterima:

Pertama:Saya tidak berpikir Anda dapat mencapai ini dengan menggunakan 127.0.0.0/8 dan/atau antarmuka loopback (seperti lo). Anda harus menggunakan beberapa IP dan antarmuka lain, karena ada hal-hal khusus yang telah ditetapkan untuk 127.0.0.0/8 dan untuk loopback.

Maka tentu ada lebih dari satu metode, tetapi ini contohnya:

# ip netns add vpn
# ip link add name vethhost0 type veth peer name vethvpn0
# ip link set vethvpn0 netns vpn
# ip addr add 10.0.0.1/24 dev vethhost0
# ip netns exec vpn ip addr add 10.0.0.2/24 dev vethvpn0
# ip link set vethhost0 up
# ip netns exec vpn ip link set vethvpn0 up
# ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.134 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.100 ms

Perintah pertama membuat dari udara tipis sepasang antarmuka ethernet virtual yang dihubungkan oleh kabel ethernet virtual. Perintah kedua memindahkan salah satu antarmuka ini ke netns vpn. Anggap itu setara dengan hal-hal seperti socketpair(2) atau pipe(2):sebuah proses membuat pasangan, lalu bercabang, dan setiap proses hanya menyimpan satu ujung pasangan dan mereka dapat berkomunikasi.

Biasanya (LXC, virt-manager,…) ada juga jembatan yang terlibat untuk meletakkan semuanya di LAN yang sama ketika Anda memiliki banyak jaringan.

Setelah ini di tempat, untuk host itu seperti router apa pun.
Aktifkan penerusan ip (lebih ketat jika Anda bisa:Anda memerlukannya setidaknya untuk vethhost0 dan antarmuka utama):

# echo 1 > /proc/sys/net/ipv4/conf/all/forwarding

Tambahkan beberapa aturan DNAT, seperti:

# iptables -t nat -A PREROUTING ! -s 10.0.0.0/24 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.2

Sekarang Anda dapat menambahkan rute default di dalam vpn dengan:

# ip netns exec vpn ip route add default via 10.0.0.1

Atau sebaliknya, tambahkan aturan SNAT agar semuanya terlihat berasal dari 10.0.0.1 di dalam vpn.

# iptables -t nat -A POSTROUTING -d 10.0.0.2/24 -j SNAT --to-source 10.0.0.1

Dengan ini di tempat Anda dapat menguji dari host lain, tetapi tidak dari host itu sendiri. Untuk melakukan ini, tambahkan juga aturan DNAT yang mirip dengan DNAT sebelumnya, tetapi di OUTPUT dan ubah (jika tidak, koneksi http keluar akan diubah juga) ke IP Anda sendiri. Katakanlah IP Anda adalah 192.168.1.2:

# iptables -t nat -A OUTPUT -d 192.168.1.2 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.2

Sekarang bahkan akan berfungsi jika Anda terhubung dari host ke dirinya sendiri jika Anda tidak menggunakan ip loopback, tetapi IP lain milik host dengan aturan nat seperti di atas. Katakanlah IP Anda adalah 192.168.1.2:

# ip netns exec vpn nc -l -s 10.0.0.2 -p 80 &
[1] 10639
# nc -vz 192.168.1.2 80
nc: myhost (192.168.1.2) 80 [http] open
#
[1]+  Done                    ip netns exec vpn nc -l -s 10.0.0.2 -p 80

Linux
  1. Cara Membuat Berbagi Jaringan melalui Samba di Linux

  2. Bagaimana membedakan antara 2 Micros di Linux

  3. Linux:Bagaimana mengukur lalu lintas jaringan harian/bulanan?

  1. Cara menggunakan perintah mtr Linux

  2. Bagaimana Melakukan Chroot Dengan Ruang Nama Linux?

  3. Linux – Bagaimana Cara Berhenti Berbagi Jaringan Untuk Proses Saat Ini?

  1. Linux – Bagaimana Cara Mendaftar Namespace Di Linux?

  2. Cara Memantau dan Mencatat Lalu Lintas Jaringan di Linux Menggunakan vnStat

  3. Cara memantau lalu lintas jaringan di Linux menggunakan vnStat