ds-lite(IPv4 over IPv6ルータ)の構築 -Firewalld → nftables 切替-
“VPSサーバ" と “ミニPC" を使用し、"ds-lite(IPv4 over IPv6ルータ)の構築(以降、ds-lite)" をしています。今回は、ファイアウォール(Firewalld → nftables) の切替をしましたので、そのことを書きたいと思います。
【お願い】
・ds-lite(IPv4 over IPv6ルータ) の構築については、解らない部分・理解が出来ていないことがあります。自分のPC、インターネット環境を使用してds-liteの情報を掲載しますが、これが正しいと思わないようにお願いします。
また、自分はVPSサーバー(クラウドサーバ)を使用しています。※サービスは従量制ため、ご使用の場合は注意をお願いします。今回の記事について、PC,その他のトラブルについては責任を負いかねます。自己責任でお願い致します。
1. 自分のインターネット環境・機器
・光回線事業者:ドコモ光 1ギガ Aタイプ
・IPoeサービス:v6プラス
・ミニPC:MINISFORUM MT4UB1
2. VPSサーバー
・VULTR
サービス名:Cloud Compute(Regular Performance)
CPU:1vCPU/Memory:1GB/Bandwidth:1.00TB/Storage:25GB
・[インストールOS]:RedHat Enterprise Linux 9 (無償版)
3. ds-liteの構築
【前提条件】
・少し構築の部分で変更があり設定について順番に書きますが、過去のds-liteの構築についてほとんど変わりありません。恐れ入りますが、省略をさせて頂きます。
・過去のds-liteの構築については、カテゴリより"ds-lite"を見て頂きますようお願いします。
・ミニPCにdhcpサーバが構築されている。
・VPSサーバとminiPCにperlの実行環境がされている。
3.1 VPSサーバ側
[3.1.1] ds-liteの設定
“perl言語"を使って実行をしています。
ソースコードを掲載しますが、【】の部分は変更しています。
ds-lite@vps:~ $ sudo vim /home/ds-lite/vps_ds-lite.pl
#!/usr/bin/perl #-----------【魔法の言葉】------------ use POSIX qw(strftime); use File::Path; use strict; use warnings; #use NetAddr::IP; #use Net::Netmask; #use utf8; #-----------【変数】------------ #IP関連設定 my $LOCAL_IPV6="【ミニPC:取得済みのIPv6アドレス】"; my $VPS_SERVER_IPV6="【VPSサーバ:取得済みのIPv6アドレス】"; my $LOCAL_IPV4="【ミニPC:dhcpクライアントのipv4アドレス/サブネットマスク】"; my $LOCAL_IPV4_GW="【ミニPC:dhcpdサーバのipv4アドレス】"; #-----------【処理】------------ print "ds-liteの構築を開始します。\n"; print "※スーパーユーザーで実行してください\n"; print "項目の値を変更したい場合はテキストエディターなど使用し編集を行ってください。\n"; print "\n"; print "ds-liteを開始したい場合は・・・ 1 \n"; my $question = <STDIN>; chomp $question; if($question == "1"){ print "これより ds-lite の構築を開始します。\n"; my $ipip6tunnel_1 = `modprobe ip6_tunnel`; my $ipip6tunnel_2 = `ip -6 tunnel add ip6tnl mode ipip6 remote '${LOCAL_IPV6}' local '${VPS_SERVER_IPV6}' dev ens3 encaplimit none`; my $ipip6tunnel_3 = `ip link set dev ip6tnl up`; my $sysctl_1 = `sysctl -w net.ipv4.ip_forward=1`; my $sysctl_2 = `sysctl -w net.ipv4.conf.all.forwarding=1`; my $sysctl_3 = `sysctl -w net.ipv4.conf.ens3.rp_filter=0`; my $sysctl_4 = `sysctl -w net.ipv4.conf.ip6tnl.rp_filter=0`; my $sysctl_5 = `sysctl -w net.nf_conntrack_max=65535`; my $sysctl_6 = `sysctl -p`; my $route_1 = `route add -net 192.168.0.0/16 dev ip6tnl`; my $route_2 = `route add -net 10.0.0.0/8 dev ip6tnl`; my $route_3 = `route add -net 172.16.0.0/12 dev ip6tnl`; my $route_4 = `route add -net '${LOCAL_IPV4}' dev ip6tnl`; print("ipv6 ds-lite の構築が完了しました。\n"); }else{ print "1以外の入力がされました。\n"; print "終了します。\n"; }
[3.1.2] ファイアウォール(nftable)の設定
ソースコードを掲載しますが、【】の部分は変更しています。
※ファイアウォールの細かい設定は、個々で設定を行ってください。
ds-lite@vps:~ $ sudo vim /etc/sysconfig/nftables.conf
flush ruleset table inet filter { chain input { type filter hook input priority filter; policy accept; iifname "ens3" ip6 saddr 【ミニPC:取得済みのIPv6アドレス】 counter packets 0 bytes 0 accept iifname "ens3" jump input6_ens3 ct state related,established counter packets 0 bytes 0 accept } chain forward { type filter hook forward priority filter; policy accept; } chain output { type filter hook output priority filter; policy accept; oifname "ens3" ip6 daddr 【ミニPC:取得済みのIPv6アドレス】 counter packets 0 bytes 0 accept ct state related,established counter packets 0 bytes 0 accept } chain input6_ens3 { ct state {established,related} accept ct state invalid drop udp dport bootpc accept tcp dport bootpc accept reject with icmp type port-unreachable } } table ip nat { chain POSTROUTING { type nat hook postrouting priority srcnat; policy accept; oifname "ens3" counter packets 0 bytes 0 masquerade ct state related,established counter packets 0 bytes 0 accept } chain forward { type filter hook forward priority filter; policy accept; iifname "ip6tnl" oifname "ens3" counter packets 0 bytes 0 accept iifname "ens3" oifname "ip6tnl" ct state related,established counter packets 0 bytes 0 accept } }
[3.1.3] ds-liteの構築実行・nftableの実行
【ds-lite】
ds-lite@vps:~ $ sudo perl /home/ds-lite/vps_ds-lite.pl
【nftable】
ds-lite@vps:~ $ sudo nft -f /etc/sysconfig/nftables.conf
ds-lite@vps:~ $ sudo systemctl restart nftables.service
3.2 minipc側
[3.2.1] ds-liteの設定
ソースコードを掲載しますが、【】の部分は変更しています。
ds-lite@minipc:~ $ sudo vim /home/ds-lite/minipc_ds-lite.pl
#!/usr/bin/perl #-----------【魔法の言葉】------------ use POSIX qw(strftime); use File::Path; use strict; use warnings; #use NetAddr::IP; #use Net::Netmask; #use utf8; #-----------【変数】------------ #IP関連設定 my $LOCAL_IPV6="【ミニPC:取得済みのIPv6アドレス】"; my $VPS_SERVER_IPV6="【VPSサーバ:取得済みのIPv6アドレス】"; #-----------【処理】------------ print "ds-liteの構築を開始します。\n"; print "※スーパーユーザーで実行してください\n"; print "項目の値を変更したい場合はテキストエディターなど使用し編集を行ってください。\n"; print "\n"; print "ds-liteを開始したい場合は・・・ 1 \n"; my $question = <STDIN>; chomp $question; if($question == "1"){ print "これより ds-lite の構築を開始します。\n"; my $ipip6tunnel_1 = `modprobe ip6_tunnel`; my $ipip6tunnel_2 = `ip -6 tunnel add ip6tnl mode ipip6 remote '${VPS_SERVER_IPV6}' local '${LOCAL_IPV6}' dev ens3 encaplimit none`; my $ipip6tunnel_3 = `ip link set dev ip6tnl up`; my $sysctl_1 = `sysctl -w net.ipv4.ip_forward=1`; my $sysctl_2 = `sysctl -w net.ipv4.conf.all.forwarding=1`; my $sysctl_3 = `sysctl -w net.ipv6.conf.ip6tnl1.accept_ra = 0`; my $sysctl_4 = `sysctl -p`; print("ipv6 ds-lite の接続が完了しました。\n"); }else{ print "1以外の数字が入力されました。\n"; print "終了します。\n"; }
[3.2.2] ファイアウォール(nftable)の設定
ソースコードを掲載しますが、【】の部分は変更しています。
※ファイアウォールの細かい設定は、個々で設定を行ってください。
ds-lite@minipc:~ $ sudo vim /etc/sysconfig/nftables.conf
flush ruleset table inet filter { chain input { type filter hook input priority filter; policy accept; iifname "lo" counter packets 0 bytes 0 accept; iifname "enp2s0" ip6 saddr 【VPSサーバ:取得済みのIPv6アドレス】 counter packets 0 bytes 0 accept iifname "enp2s0" jump input6_enp2s0 ct state related,established counter packets 0 bytes 0 accept } chain forward { type filter hook forward priority filter; policy accept; } chain output { type filter hook output priority filter; policy accept; oifname "enp2s0" ip6 daddr 【VPSサーバ:取得済みのIPv6アドレス】 counter packets 0 bytes 0 accept ct state related,established counter packets 0 bytes 0 accept } chain input6_enp2s0 { ct state {established,related} accept ct state invalid drop udp dport bootpc accept tcp dport bootpc accept reject with icmp type port-unreachable # all other traffic } } table ip nat { chain postrouting { type nat hook postrouting priority srcnat; policy accept; oifname "ip6tnl1" counter packets 0 bytes 0 masquerade oifname "enp1s0" counter packets 0 bytes 0 masquerade ct state related,established counter packets 0 bytes 0 accept } chain forward { type filter hook forward priority filter; policy accept; iifname "ip6tnl1" oifname "enp1s0" counter packets 0 bytes 0 accept iifname "enp1s0" oifname "ip6tnl1" ct state related,established counter packets 0 bytes 0 accept } }
[3.2.3] ds-liteの構築実行・nftableの実行
【ds-lite】
ds-lite@minipc:~ $ sudo perl /home/ds-lite/minipc_ds-lite.pl
【nftable】
ds-lite@minipc:~ $ sudo nft -f /etc/sysconfig/nftables.conf
ds-lite@minipc:~ $ sudo systemctl restart nftables.service
以上になります。
【使用サービス情報】
NTT Docomo さん
JPIX さん
VULTR さん(※紹介リンク用にさせて頂いています。※)
【参考文献】
・Archlinux さん -nftables-
・Server World さん -CentOS Stream 9/Nftables : サービスを有効化する –
・有限会社ビットハイブ さん -nftablesによるファイアウォール設定-
ディスカッション
コメント一覧
まだ、コメントがありません