Tunneling IP publik ke mesin jarak jauh

8

Saya memiliki server Linux A dengan blok 5 alamat IP publik 8.8.8.122/29,. Saat ini, 8.8.8.122ditugaskan untuk eth0, dan 8.8.8.123ditugaskan untuk eth0:1.

Saya punya mesin Linux B lain di lokasi terpencil, di belakang NAT. Saya ingin membuat terowongan antara keduanya sehingga B dapat menggunakan alamat IP 8.8.8.123sebagai alamat IP utamanya.

OpenVPN mungkin jawabannya, tapi saya tidak tahu bagaimana mengaturnya ( topology subnetatau topology p2pmungkin lebih tepat. Atau haruskah saya menggunakan Ethernet bridging?). Keamanan dan enkripsi bukan masalah besar pada saat ini, jadi GRE juga akan baik-baik saja - mesin B akan datang dari alamat IP yang dikenal dan dapat diautentikasi berdasarkan itu.

Bagaimana saya bisa melakukan ini? Adakah yang bisa menyarankan konfigurasi OpenVPN, atau pendekatan lain, yang dapat bekerja dalam situasi ini? Idealnya, itu juga akan dapat menangani banyak klien (mis. Berbagi keempat IP cadangan dengan mesin lain), tanpa membiarkan klien tersebut menggunakan IP yang bukan hak mereka.

Jim Paris
sumber
Firewall apa yang ada di kedua lokasi?
Robert
1
Saya harap Anda baru saja membuat alamat itu, daripada Anda benar-benar bekerja di Google. Jika tidak, Anda tidak akan dapat menggunakan ruang alamat mereka.
Michael Hampton
Robert: A adalah server Linux dengan beberapa iptablesaturan sederhana . B berada di belakang NAT yang menjalankan server Linux lain shorewall.
Jim Paris
Michael: Ya, saya mengubah tiga oktet pertama menjadi 8 untuk mengaburkan mereka, tetapi masih menunjukkan bahwa mereka publik. Maaf, Google.
Jim Paris
1
Untuk referensi di masa mendatang, kami memiliki RFC untuk itu .
Michael Hampton

Jawaban:

7

Saya akhirnya pergi dengan menjembatani Ethernet. Banyak contoh yang sangat bertele-tele untuk disiasati secara online, tetapi ternyata cukup mudah:

Pertama, pada A , /etc/network/interfacesdiubah dari:

auto eth0
iface eth0 inet static
    address 8.8.8.122
    netmask 255.255.255.248
    gateway 8.8.8.121

untuk:

auto br0
iface br0 inet static
    address 8.8.8.122
    netmask 255.255.255.248
    gateway 8.8.8.121
    pre-up openvpn --mktun --dev tap0
    bridge_ports eth0 tap0
    bridge_fd 3

untuk menjembatani eth0(antarmuka WAN nyata) dengan tap0(antarmuka terowongan baru) saat boot.

Kemudian, pada A , jalankan server openvpn dengan:

openvpn --dev tap0

Pada B , sambungkan dengan:

openvpn --remote 8.8.8.122 --dev tap0 --route-gateway 8.8.8.121 \
        --redirect-gateway def1 --ifconfig 8.8.8.123 255.255.255.248

Itu konfigurasi super sederhana yang saya cari, dan berfungsi - B sekarang dapat diakses publik di 8.8.8.123, dan koneksi keluar berasal dari alamat yang sama.

Tambahkan keamanan ( --secret,, --tls-serverdll) sesuai kebutuhan, tentu saja.

Jim Paris
sumber
Bagus! Saya akan mencobanya. Apakah Anda menemukan cara untuk mengonfigurasi itu: "tanpa membiarkan klien tersebut menggunakan IP yang bukan haknya"?
Bastian
Saya tidak mengganggu pengaturan saya (yang bersifat sementara), tapi saya kira Anda bisa melakukannya dengan ebtables.
Jim Paris
Sangat berguna. Sebuah pertanyaan: apa yang harus saya ubah dalam konfigurasi A jika saya perlu merutekan dua IP dari A: A => B dan A => C (di mana C adalah host lain)? Apakah saya perlu mengkonfigurasi jembatan lain?
frhack
2
Ya. Menambah pre-up openvpnbaris untuk membuat tap1juga, menambahkan tap1untuk bridge_ports, dan menjalankan contoh lain dari openvpn dengan openvpn --dev tap1.
Jim Paris
Bagaimana jika Anda ingin membuat gateway A lokal melalui B sehingga sistem apa pun di LAN dapat menggunakan B dan menetapkan gateway default jarak jauh dan menggunakan IP publik?
Areeb Soo Yasir
1

Anda akan mengalami kesulitan saya pikir. Sebagian besar firewall akan mengalami kesulitan merutekan lalu lintas OpenVPN jika kedua sisi VPN berada di subnet yang sama.

Jika Anda mencoba merutekan untuk akses publik, saya akan memindahkan kedua server ke subnet berbeda dari alamat publik Anda dan kemudian menggunakan IP Virtual (1 hingga 1 Nat) untuk menghubungkannya. Untuk menghubungkan kedua situs, OpenVPN akan berfungsi atau terowongan IP-Sec.

IP Virtual: http://doc.pfsense.org/index.php/What_are_Virtual_IP_Addresses%3F

Situs ke situs: http://doc.pfsense.org/index.php/VPN_Capability_IPsec

Edit berdasarkan komentar:

Saya pribadi menginstal pfSense pada kotak A dan memberikannya port yang Anda inginkan untuk WAN-nya. Kemudian setup server OpenVPN pada subnet lokal (yang semuanya siap untuk masuk dalam antarmuka web pfSense) dan setup mesin lain dengan IP Virtual yang menunjuk ke IP OpenVPN lokalnya. Ini akan memberi Anda ruang untuk ekspansi nanti (menambahkan lebih banyak mesin dengan IP Virtual, meneruskan port spesifik secara logis ke server yang berbeda, benar-benar memiliki pengaturan LAN / WAN / DMZ yang penuh sesak dengan OpenVPN untuk akses virtual. Belum lagi Anda akan memiliki router full blown sehingga kemungkinan akan lebih aman.

Robert
sumber
Saya tidak mengerti bagaimana firewall perantara terlibat; mereka pasti tidak akan mencari di dalam paket OpenVPN antara A dan B . Untuk konfigurasi OpenVPN sendiri, saya mengharapkan sesuatu seperti push "route 50.7.19.122 255.255.255.255 net_gateway"akan memastikan bahwa data VPN masih didorong melalui jaringan normal.
Jim Paris
Agar lebih jelas, saya ingin membuat terowongan langsung antara A dan B , bukan pada firewall yang terpisah di setiap ujung.
Jim Paris
1
Tetapi ketika komputer A ingin merutekan ke komputer B, ia tidak akan tahu apakah ia harus menggunakan WAN (dengan IP publik Anda), LAN (dengan IP statisnya) atau OpenVPN (juga dengan IP publik Anda) karena semuanya subnet yang sama. B ke A harus bekerja.
Robert
1
Juga ada ini, saya sudah berhasil tetapi tidak dengan IP publik. Saya pikir ip virtual akan jauh lebih baik. openvpn.net/index.php/open-source/documentation/miscellaneous/…
Robert
"Agar lebih jelas, saya ingin membuat terowongan langsung antara A dan B, bukan pada firewall yang terpisah di setiap ujung." Anda perlu membuka port di suatu tempat untuk server OpenVPN
Robert