Perubahan konfigurasi berikut harus memastikan aliran lalu lintas antara Docker dan host Shorewall. Diuji pada Shorewall 4.5.21.9 tetapi harus berlaku untuk versi terbaru:
/etc/shorewall/shorewall.conf
Pastikan penerusan IP diaktifkan (sebagian besar item konfigurasi Ya / Tidak, tetapi yang ini "Aktif"):
IP_FORWARDING=On
/ etc / shorewall / masq
Aktifkan penyamaran (NAT) untuk jaringan Docker pribadi Anda (jika Anda menggunakan jaringan yang berbeda, yaitu dengan meluncurkan docker --bip=#.#.#.#/#
, lalu ubah sesuai itu). Ubah eth0
ke antarmuka apa pun pada mesin host dengan konektivitas eksternal:
#INTERFACE:DEST SOURCE
eth0 172.17.0.0/16
/ etc / shorewall / interfaces
Tambahkan entri antarmuka sehingga Shorewall tahu antarmuka mana yang dock
terkait dengan zona:
#ZONE INTERFACE OPTIONS
dock docker0
/ etc / shorewall / zona
Buat zona baru; perhatikan, docker
terlalu panjang dan akan menyebabkan kesalahan "nama zona tidak valid".
#ZONE INTERFACE
dock ipv4
/ etc / shorewall / kebijakan
Anda mungkin ingin mengizinkan wadah Docker untuk berbicara dengan mesin host dan Internet, jadi ini adalah titik awal yang baik:
#SOURCE DEST POLICY
# ...(other policies)...
dock all ACCEPT
# ...(other policies, catch-all)...
Anda mungkin juga perlu serupa ACCEPT
kebijakan untuk lalu lintas dari fw
ke dock
, jika Anda tidak sudah membukanya dengan fw
ke all
.
Anda dapat memperketat ini lebih lanjut dalam file kebijakan atau aturan yang diperlukan. Misalnya, hal di atas tidak secara eksplisit mengizinkan lalu lintas luar untuk mencapai wadah Docker Anda; periksa zona / kebijakan / aturan Anda yang lain untuk itu.
IP_FORWARDING=Yes
danIP_FORWARDING=True
bekerja juga. Saya memilikinya di beberapa router produksi, tetapi jawaban Anda jauh lebih jelas daripada saya. Kerja bagus./etc/shorewall/interfaces
.Sejak Docker memperkenalkan fitur isolasi jaringannya, solusi lain yang disebutkan di sini tidak lagi memadai jika Anda ingin menggunakan jaringan khusus. Shorewall 5.0.6 memperkenalkan dukungan untuk Docker termasuk jaringan Docker. Ini:
sumber
Baru saja menemukannya di kotak saya. Pastikan /etc/shorewall.conf memiliki:
IP_FORWARDING=Yes
Docker bergantung pada penerusan, dan saya mengatur bahwa 'boneka' membuatnya menjadi 'Tidak' di semua server saya.
Pembaruan: Anda mungkin juga perlu menyamarkan lalu lintas yang berasal dari buruh pelabuhan dari antarmuka WAN.
Edit
/etc/shorewall/masq
dan Anda akan membutuhkan garis yang mirip dengan:br0 172.17.0.0/12
Dalam hal ini, antarmuka WAN saya sebenarnya adalah br0 (jembatan), tetapi milik Anda mungkin akan seperti eth0. (Gunakan
ifconfig
untuk melihat antarmuka Anda dan alamat IP-nya). Pada docker mesin saya menggunakan 172.17.0.0/24 yang merupakan rentang alamat pribadi RFC1918. Ini mungkin berbeda pada sistem lain, tetapi Anda dapat melihat jangkauan dengan menggunakanifconfig
sekali lagi untuk mencari antarmukadocker0
.sumber
Anda dapat memastikan bahwa Docker ruleset selamat dari restart shorewall dengan membuat skrip ekstensi yang menyimpan
DOCKER
rantai sebelum restart, dan kemudian mengembalikannya lagi sesudahnya. Saya baru saja memasang posting dengan contoh bagaimana melakukan ini , walaupun saya yakin itu jauh dari satu-satunya metode yang mungkin.sumber
Layanan buruh pelabuhan dapat dimulai kembali tanpa memengaruhi wadah yang sedang berjalan, dan dapat dijalankan setelah Shorewall memulai kembali untuk memuat kembali aturan khusus buruh pelabuhan. Jelas akan ada waktu singkat di mana jaringan ke wadah terganggu.
Ini berlaku setidaknya pada beberapa pemasangan Archlinux saya.
sumber
Tindakan refresh tidak membersihkan iptable jadi ini jika Anda hanya ingin me-refresh aturan atau kebijakan, Anda bisa menjalankan refresh bukannya me-restart:
Jelas, masalahnya masih ada jika Anda benar-benar perlu memulai ulang shorewall. Kemudian, Anda harus memulai kembali buruh pelabuhan dan menyalakan kembali wadah Anda.
sumber
Salah satu opsi yang memungkinkan adalah menjalankan Docker dengan opsi --net = host, untuk memungkinkan jaringan host akses aplikasi kemas tanpa penerusan ip dan NAT.
sumber