IP転送を有効にして(enp0s3
とtun0
インターフェースの間)、net.ipv4.ip_forward = 1
を/etc/sysctl.conf
に書き込みます。再起動後、
$ cat /proc/sys/net/ipv4/ip_forward
1
しかし、転送はまだ機能していません。 net.ipv4.conf.default.forwarding=1
に/etc/sysctl.conf
を追加しようとしています。今再起動した後
$ cat /proc/sys/net/ipv4/ip_forward
1
$ cat /proc/sys/net/ipv4/conf/default/forwarding
1
$ cat /proc/sys/net/ipv4/conf/all/forwarding
1
$ cat /proc/sys/net/ipv4/conf/enp0s3/forwarding
0
$ cat /proc/sys/net/ipv4/conf/tun0/forwarding
0
/proc/sys/net/ipv4/conf/enp0s3/forwarding
で/proc/sys/net/ipv4/conf/tun0/forwarding
とsysctl.conf
を有効にできないのは、これらのファイルが起動時の初期には存在しないためです。
systemd-sysctl[85]: Couldn't write '1' to 'net/ipv4/conf/enp0s3/forwarding', ignoring: No such file or directory
systemd-sysctl[85]: Couldn't write '1' to 'net/ipv4/conf/tun0/forwarding', ignoring: No such file or directory)
、さらにtun0
は動的インターフェースです(いつでも追加および削除できます)。
enp0s3
およびtun0
の転送を手動で有効にすると、転送は期待どおりに機能します。
では、インターフェイスの転送を適切に有効にする方法は?
PS:カーネル4.1.15およびsystemd 226を備えたGentoo
PPS:私の記憶が少し前に役立った場合、net.ipv4.ip_forward = 1
で十分でした。
ようやく問題を解決しました。 systemdを使用し(networkdで)、IP転送に関する新機能がsystemd-221に導入されました: "IPForwarding ="-see https://github.com/systemd/systemd/blob/a2088fd025deb90839c909829e27eece40f7fce4/NEWS =
man systemd.network
から:
[ネットワーク]セクションオプション
...
IPForward =
ネットワークインターフェースのIP転送を設定します。有効にすると、ネットワークインターフェースの着信パケットは、ルーティングテーブルに従って他のインターフェースに転送されます。ブール引数、または指定されたアドレスファミリのIP転送のみを有効にする値「ipv4」または「ipv6」、または既存のsysctl設定を保持する「カーネル」のいずれかを取ります。これは、ネットワークインターフェースのnet.ipv4.conf..forwardingおよびnet.ipv6.conf..forwarding sysctlオプションを制御します(sysctlオプションの詳細については、ip-sysctl.txt [1]を参照してください)。 デフォルトは「いいえ」です。
注:このオプションがオンになっていないか、「カーネル」に設定されていない限り、net.ipv4.ip_forward、net.ipv4.confを使用してカーネルでグローバルにオンになっている場合でも、このインターフェースではIP転送は行われません。 all.forwarding、およびnet.ipv6.conf.all.forwarding sysctlオプション。
そこで、次のようなネットワークファイルを使用して、IP転送を有効にします(インターフェイスごと)。
# cat /etc/systemd/network/tun0.network
[Match]
Name=tun0
[Network]
IPForward=ipv4