docker のネットワーク関連
docker をインストールすると色々起きる
dockerd が起動する時に色々を悪さをしてくれますw
コンテナ・ネットワークあれこれ
docker network create で新しくネットワークを作れます。
既存の DMZ ZONE ブリッジに接続する事も見た目上できますが…
そのブリッジに IP を振ってくれやがります。
で振った IP を GW として使います。
パケットは DMZ ZONE を通りませんw
回避策?w
source routing を使って
# routing table(LAN は L3 Switch へ。それ以外は DMZ GW へ)
/usr/sbin/ip route add table 1000 to 192.168.XXX.0/24 via 192.168.YYY.L3SW dev dmz
/usr/sbin/ip route add table 1000 to default via 192.168.YYY.GW dev dmz
# Docker の out パケットを上の routing table へ流す
/usr/sbin/ip rule add from 192.168.YYY.0/24 table 1000 priority 10000
# Docker の default GW 宛(要は HOST 宛)をDROP
/usr/sbin/iptables -A INPUT -s 192.168.YYY.0/24 -d 192.168.YYY.DGW -j DROP
# DNS と TCP の戻りは許可
/usr/sbin/iptables -A INPUT -d 192.168.YYY.DNS -p udp --dport 53 -j ACCEPT
/usr/sbin/iptables -A INPUT -s 192.168.YYY.DNS -p udp --sport 53 -j ACCEPT
/usr/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
IP関連
192.168.XXX.0/24: Trust zone
192.168.YYY.0/24: DMZ zone
192.168.YYY.L3SW: L3 Switch(Trust - DMZ Firewall)
192.168.YYY.GW : DMZ zone default gateway
192.168.YYY.DGW : docker network gateway
192.168.YYY.DNS : DNS server IP
素直に DMZ 用の仮想環境を作れって話。
当時は AMD FX 使っててコンテナ型で完結したかったのだもん
ブリッジの通信が出来なくなる
dockerd が勝手に br_netfilter を insmod してくれます。
結果的にブリッジ間の通信が出来なくなります。
br_netfilter を無効にしてしまう
起動時に bridge と br_netfilter を組み込む
これをやってないと sysctl.conf 適用時に br_netfilter が insmod されておらず
設定が反映されない。
# cat > /etc/modules-load.d/bridge.conf
bridge
br_netfilter
sysctl で無効化
# cat >> /etc/sysctl.conf
net.bridge.bridge-nf-call-arptables=0
net.bridge.bridge-nf-call-ip6tables=0
net.bridge.bridge-nf-call-iptables=0
適用
sysctl -p
iptables に疎通設定を入れる(Ubuntu)
iptables 永続化のためにインストール
設定を保存するか?の問には NO
YES にすると dockerd が設定したルールまで保存されてしまう。
sudo apt install iptables-persistent
例えばブリッジ名 lan を設定する。
# cat > /etc/iptables/rules.v4
*filter
-A FORWARD -i lan ! -o lan -j ACCEPT
-A FORWARD -i lan -o lan -j ACCEPT
COMMIT
適用
iptables-restore --noflush < /etc/iptables/rules.v4
ゲートウェイとして機能しなくなる
FORWARD chain の Policy を drop に変更しやがる事があります。
これにより VPN の疎通が妨害されたりします。
tun0 インタフェースで IP FORWARD したい場合は
iptables -A FORWARD -i tun0 -j ACCEPT
iptables -A FORWARD -o tun0 -j ACCEPT
永続化するなら少し上を参照w