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