以前は、muli-network-interface-server上の異なるネットワークインターフェイス間でパッケージを転送するようにiptablesを構成していました。
長い間、サーバーをUbuntu1604に更新するまでは問題なく動作しました。
Ubuntu 1604には、networkinterfaces( Predictable Network Interface Names )の名前を変更する新しいカーネルが付属しています。
このサーバーが2つのサブネットワークを相互に接続するとします。
enp3s0
とIP192.168.1.155
、ネットワークに接続192.168.1.0/24
、enxa0cec80f64f3
with ip 10.1.1.1
はネットワーク10.1.1.0/24
に接続します。以下のように。
Terminal1(10.1.1.2/24, gateway10.1.1.1)
||
||
\/
+---------------------------+
| enxa0cec80f64f3(10.1.1.1) |
| |
| Server |
| |
| enp3s0(192.168.1.155) |
+---------------------------+
/\
||
||
Host1(192.168.1.111/24, route to 10.1.1.0/24 via 192.168.1.155)
2つのネットワーク内のホストが互いに自由に通信できるようにするには、サーバー上のiptablesを次のように構成します。
$ Sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.1.1.0/24 -d 192.168.1.0/24 -i enxa0cec80f64f3 -o enp3s0 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -s 192.168.1.0/24 -d 10.1.1.0/24 -i enp3s0 -o enxa0cec80f64f3 -m conntrack --ctstate NEW -j ACCEPT
言い回しが正しく機能しません。
192.168.1.155
、[〜#〜] success [〜#〜];10.1.1.1
、[〜#〜] success [〜#〜];10.1.1.2
)、[〜#〜]失敗しました[〜#〜];Tcpdumpを使用してサーバーをチェックしたところ、enp3s0
側からのパケットが転送されませんでした。 (どういうわけか、反対側からのパケットをチェックするだけではいけません)
たぶんiptablesはenxa0cec80f64f3のような長い名前のネットワークインターフェースでは動作しませんか?
転送の正しいテストはあるインターフェースに存在し、別のインターフェースを介してアクセスされる宛先を持つパケットが他のインターフェースにも現れるかどうかであり、それをテストする正しい方法はtcpdump
。これが適切に行われている転送です。内部インターフェースのトラフィック:
[me@router ~]$ Sudo tcpdump -n -n -i em2 icmp
[...]
07:03:55.490295 IP 178.18.x.139 > 178.18.123.145: ICMP echo request, id 56423, seq 1, length 64
07:03:56.491899 IP 178.18.x.139 > 178.18.123.145: ICMP echo request, id 56423, seq 2, length 64
同時に外部で:
[me@router ~]$ Sudo tcpdump -n -n -i em1 icmp
[...]
07:03:55.490588 IP 178.18.x.139 > 178.18.123.145: ICMP echo request, id 56423, seq 1, length 64
07:03:56.492255 IP 178.18.x.139 > 178.18.123.145: ICMP echo request, id 56423, seq 2, length 64
表示されない場合(表示されない場合)、最初に確認するのはiptables
です。しかし、Michael Hamptonが指摘しているように、ルールにはnothingが含まれていますが、ACCEPT
sが含まれているため、問題になることはありません。 Big Kernel ForwardingSwitchを確認することもお勧めします
[me@router ~]$ cat /proc/sys/net/ipv4/ip_forward
1
あなたの場合は0
を返しました-転送が有効になっていないことを意味します。これを修正すると、おそらく/etc/sysctl.conf
の関連する行を変更し、sysctl -p
を実行することで、問題が修正されました。