web-dev-qa-db-ja.com

Linuxでsystemdを使用してIP転送を適切に永続的に有効にする方法は?

IP転送を有効にして(enp0s3tun0インターフェースの間)、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/forwardingsysctl.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で十分でした。

8
Unsacrificed

ようやく問題を解決しました。 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
3
Unsacrificed