Tunnel IP statis yang ditugaskan untuk VPS ke router rumah

1

Saat ini saya memiliki VPS dengan IP statis tunggal. Apakah skenario berikut mungkin terjadi jika saya membeli IP statis kedua?

Misalkan IP A pada eth0: 0 adalah 1.2.3.4 dan IP B statis pada eth0: 1 adalah 5.6.7.8 . Saya ingin merutekan semua lalu lintas ke IP A ke router rumah saya, tanpa menggunakan server-side NAT. Saya berpikir untuk membangun terowongan GRE (diamankan dengan IPsec) antara router rumah saya dan IP B. Paket IP yang masuk pada IP A kemudian harus dilewatkan di dalam terowongan. Saya pikir diagram harus membuat ini lebih jelas: diagram jaringan Biasanya, ini akan menjadi kasus yang jelas menggunakan Site-to-Site-VPN dan menggunakan NAT pada VPS, tapi saya sebenarnya tidak ingin menggunakan sisi server NAT . Sebagai gantinya, saya ingin router rumah saya melakukan srcnat pada keluar dan dstnat pada lalu lintas masuk tertentu. VPS seharusnya hanya "melewati" paket IP yang masuk dan keluar.

Saya membayangkan aliran paket sebagai berikut:

  1. Host di dalam LAN 192.168.100.0/24 ingin mengirim paket ke, katakanlah, 8.8.8.8

  2. Router rumah gosok ini ke IP statis A (1.2.3.4)

  3. paket melewati gre1 dan memasuki VPS

  4. VPS meneruskan paket melalui eth0: 0, membiarkan bidang IP sumber tidak dimodifikasi

  5. balasan dari 8.8.8.8 tiba di VPS dengan IP tujuan 1.2.3.4

  6. VPS mengambil paket dan memasukkannya ke gre1, tanpa melakukan NAT

  7. router rumah memproses paket dan memeriksa apakah itu koneksi yang dibuat atau terkait dan meneruskannya ke klien LAN yang sesuai.

Saya kira saya bisa menambahkan IP lain pada antarmuka gre1 pada router saya, yaitu 1.2.3.4, jadi itu akan 1) menerima paket IP dengan nilai tujuan ini dan 2) mengirim paket keluar dengan IP itu alih-alih IP terowongan (10.0. 0,2)?

Singkatnya, saya hanya ingin semua paket yang tiba di eth0: 0 tiba tanpa modifikasi di gre1 pada router rumah saya. Apakah ini mungkin dengan cara yang dijelaskan?

BTW, saya menggunakan router Mikrotik di rumah, jika itu informasi tambahan.

Terima kasih atas bantuan Anda!

Alex
sumber
Langkah 6 adalah yang sulit, karena IP tujuan adalah IP antarmuka sehingga keputusan perutean adalah untuk tidak merutekan. Dan karena NAT dilakukan di tempat lain .... Dalam skenario ini, semua paket yang tiba pada 1.2.3.4 harus dipaksa ke dalam terowongan gre, jadi Anda perlu iptables shenanigans untuk membuatnya bekerja. Anda mengatakan Anda tidak ingin NAT di server - apakah ini karena Anda tidak bisa?
Paul
Terima kasih atas komentar Anda. Saya bisa NAT di server, tetapi lebih suka melakukannya di router rumah saya, karena a) router Mikrotik saya akan memberi saya sedikit lebih banyak kontrol (atau setidaknya membuat konfigurasi lebih mudah daripada hanya menggunakan sisi server CLI) dan b) Saya hanya ingin mencobanya :-) Selain menggunakan iptables - apakah mungkin sebuah jembatan yang mengandung eth saya dan tautan layer 2, mis. via L2TP, layak? Sehingga semua frame ethernet diteruskan ke terowongan L2TP?
Alex
Hmm, menjembatani antarmuka eth0: 0 dan tun0? Atau eth0: 1? Apa hal mendasar yang Anda coba selesaikan, mungkin ada cara lain?
Paul

Jawaban:

1

Pertama, berhentilah memikirkan eth0 dan eth0: 1 sebagai antarmuka terpisah. Berhenti menggambar mereka sebagai antarmuka terpisah. Mereka tidak. Anda memiliki satu antarmuka eth0 dengan dua alamat IP di atasnya - sisanya adalah ilusi yang dimainkan Linux pada alat-alat lama seperti ifconfig .


Dengan itu, ini cukup sederhana di sisi server.

  1. Untuk mengonfigurasi ini di server Anda, mulai dengan menghapus alamat 5.6.7.8 dari eth0. Anda tidak ingin server menganggap paket-paket itu miliknya dan mengkonsumsinya; Anda ingin itu bertindak sebagai router murni, dan memiliki alamat yang dialihkan ditugaskan untuk antarmuka lokal adalah persis apa router tidak perlu.

    ip addr del 5.6.7.8/x dev eth0
    
  2. Sekarang tambahkan rute statis untuk alamat di atas terowongan Anda:

    ip route add 5.6.7.8/32 dev gre1
    
  3. Itu saja (hampir). Satu-satunya komplikasi yang tersisa adalah bahwa server masih perlu menjawab pertanyaan ARP untuk alamat ini yang berasal dari gerbang lokal perusahaan hosting Anda. Untuk itu Anda memerlukan fitur proxy-ARP :

    ip neigh add proxy 5.6.7.8 dev eth0
    

    Ini memungkinkan proxy-ARP untuk satu alamat. Jangan gunakan sysctl net.ipv4.conf.all.proxy_arp=1untuk mengaktifkannya secara global; yang akan menyebabkan respons proxy-ARP untuk semua yang memiliki rute untuk server Anda, yang mungkin nyaman dalam beberapa kasus tetapi tidak perlu dalam kasus ini.

    (Sebagai catatan tambahan, userspace parpd atau ndppd mungkin lebih mudah dipahami daripada proxy-ARP / NDP berbasis kernel.)

Konfigurasi yang lebih kompleks mungkin diperlukan pada router klien , karena harus memilih antara dua gateway default (rute langsung versus GRE) tergantung pada alamat IP sumber.

Untungnya, Mikrotik RouterOS memiliki fitur perutean kebijakan Linux untuk setidaknya IPv4 (tetapi masih belum untuk IPv6), sehingga Anda dapat mengikuti ip ruleinstruksi Linux yang tersebar luas dan memetakannya 1: 1 ke perintah RouterOS. Pendeknya:

  1. Tambahkan rute default melalui terowongan GRE ke rute yang berbeda meja mark (RouterOS menyebutnya 'tanda rute'):

    /ip route add dst-address=0.0.0.0/0 gateway=gre0 routing-mark="tunnelled"
    
  2. Tambahkan aturan kebijakan untuk memilih perutean ini menandai tabel (RouterOS ...) untuk paket dari alamat sumber ini:

    /ip rule add src-address=5.6.7.8/32 table="tunnelled"
    

Sebuah komentar menyebutkan bridging. Itu tidak akan berhasil karena dua alasan.

GRE adalah terowongan Layer3 yang tidak mengangkut header seperti Ethernet dan karenanya tidak dapat dijembatani. Ada varian Layer2 itu, seperti Linux gretap dan Mikrotik eoip - sayangnya ini saling tidak kompatibel meskipun keduanya berbasis GRE.

Komentar tersebut sebenarnya menyebutkan tun , mungkin dengan asumsi bahwa tunnel adalah OpenVPN (GRE bukan OpenVPN), tetapi tun juga merupakan antarmuka Layer3. Sekarang ada versi Layer2 - antarmuka tap - dan Linux OpenVPN sebenarnya dapat dikonfigurasi untuk menggunakannya dan menjadi VPN Layer2 ... tetapi implementasi RouterOS OpenVPN tidak mendukung mode itu.

Selain itu, karena eth0: 1 bukan antarmuka yang terpisah, itu tidak dapat dijembatani tanpa juga menjembatani eth0 itu sendiri. Bisakah antarmuka virtual macvlan dibuat dari eth0 dan kemudian dijembatani dengan terowongan? Tidak yakin. Mungkin akan lebih banyak masalah daripada nilainya.

grawity
sumber
1
Saya sadar bahwa ini adalah pertanyaan berusia 2 tahun. Tidak, saya tidak begitu peduli. Jika saya tidak dapat menulis jawaban yang bagus untuk pertanyaan-pertanyaan yang sudah ketinggalan zaman hari ini, setidaknya saya akan menulis yang sudah ketinggalan zaman.
grawity