やりたいこと
- CentOS7 で eth0 に届くパケットを全て eth1 に転送し出力する
これだけ!!!
問題
- カーネルパラメータ ip_forward を有効化 (ip_forward=1) 、iptables で FORWARD チェーンにルールを追加しても転送が行われない
- 詳しくしらべると、iptables の PREROUTING チェーンにはパケットが届いているが、その先の FORWARD チェーンに到達していない
- iptables の仕組みついてはこちらを参照 (http://oxynotes.com/?p=6361)
解決策
- rp_filter を無効化する
これだけ!!!
CentOS7 では、スプーフィング対策で rp_filter というフィルターが稼働しており、これが自身宛以外のパケットを drop させている模様。
まとめ
やるべきことは以下の通り
- ip_forward を有効化
- eth0 の rp_filter を無効化 (タイポ修正しました)
- eth1 の rp_filter を無効化 (タイポ修正しました)
- iptablesのFORWARDチェーンにルールを追加
# echo 1 > /proc/sys/net/ipv4/ip_forward
# echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
# echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
# iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT