2023年03月19日

IPV6サービス 開通 その4

自宅のサーバーを公開して、OpenVPNでVPNの接続ができるようにしています。
DDNSを利用していました。ただ、無料のDDNSは、毎月の更新手続き等ちょっと面倒です。
いわゆる、Port解放です。

IPV6サービスのIPv4 over IPv6に使われているIPv4のアドレスは、固定です。
このIP Addressを使えないかなと、色々調べました。
どうやら、ONU やIPv6用のRouterの設定でどうにか、なりそうです。
ONUは、私の環境では、IPv4 over IPv6に関連がないので、
Routerでどうにかしなければいけません。

まずは、TP-LinkのC50のFirmWare がIPoEに対応したとのことで、確認。
IPv4は、つ有情のONC(NTT)経由になってしまい。IPv4 over IPv6となりません。
NECの Aterm WG2600HS2を調達して、確認。
これも、TP-Link C50と同じ現象。

https://blog.ingen084.net/posts/20220926-hikari-cross-network2
で、iptablesを利用して、Port解放の方法について言及してます。
実際に使われている様では、ないですが、希望が出てきました。
tcpdumpや"nc"の利用方法も勉強になりました。

どうにか、解放成功です。

こんな感じになりしました。
諸先輩の経験の寄せ集めです。
これを、systemd に登録して、完成です。


#!/bin/bash
#set -x
# Refer : https://ogugu.hateblo.jp/entry/2017/05/18/131751
# https://qiita.com/hsrmy_nm7/items/06ef43b09f3cf45c852b
# https://qiita.com/kakinaguru_zo/items/2764dd8e83e54a6605f2
#
# https://qiita.com/nishio-dens/items/4bb28574b7d43fd2b3bf
#
# https://blog.ingen084.net/posts/20220926-hikari-cross-network2
#
#
#
# For Port Forwarding
#
# https://blog.ingen084.net/posts/20220926-hikari-cross-network2

BR='2001:aaaa:bbbb::cccc'
CE='2400:XXXX:YYYY:ZZZZ:AAAA:BBBB:CCCC:DDDD'
IP4='153.ddd.eee.fff'
PSID=30
WAN_DEVICE='ens192'
LAN_DEVICE='ens224'
LOCAL_SOURCE='fd00::/64'
TUNDEV='ip6tnl1' # 新たに作り出すインターフェース名をは好きなように決める
BK_NUM=63
IP6_MARK='1000'

# For Port Forwarding
FORWARDING_PROTOCOL="udp"
FORWARDING_PROT_NUMBERS="PPP1" # "," list
FORWARDING_DESTINATION="192.168.GGG.DDD"
FORWARDING_DESTINATION_NUMBERS="PPP2"
FORWARDING_LOCAL_NET="192.168.GGG.0/24"

set_tunnel(){
ip -6 addr add $CE dev $WAN_DEVICE
ip -6 tunnel add $TUNDEV mode ip4ip6 remote $BR local $CE dev $WAN_DEVICE encaplimit none
ip link set dev $TUNDEV mtu 1460
ip link set dev $TUNDEV up

ip -4 route delete default
ip -4 route add default dev $TUNDEV
}

set_iptables_ip4_output(){
iptables -t nat -F

for rule in $( seq 1 ${BK_NUM} ) ; do
mark=$(( $rule + 16 ))
pn=$(( $rule - 1))
portl=$(( $rule * 1024 + $PSID * 16 ))
portr=$(( $portl + 15 ))
iptables -t nat -A PREROUTING -m statistic --mode nth --every $BK_NUM --packet $pn -j MARK --set-mark $mark
iptables -t nat -A OUTPUT -m statistic --mode nth --every $BK_NUM --packet $pn -j MARK --set-mark $mark
iptables -t nat -A POSTROUTING -p icmp -o $TUNDEV -m mark --mark $mark -j SNAT --to $IP4:$portl-$portr
iptables -t nat -A POSTROUTING -p tcp -o $TUNDEV -m mark --mark $mark -j SNAT --to $IP4:$portl-$portr
iptables -t nat -A POSTROUTING -p udp -o $TUNDEV -m mark --mark $mark -j SNAT --to $IP4:$portl-$portr
done

iptables -t mangle -o $TUNDEV --insert FORWARD 1 -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:65495 -j TCPMSS --clamp-mss-to-pmtu

}


set_iptables_ip6_output(){
ip6tables -F

# すべての通信を素通りだと怖いので MARKをつけてLAN内のものからのみ許可する
ip6tables -t nat -A PREROUTING -i $LAN_DEVICE -j MARK --set-mark $IP6_MARK
ip6tables -t filter -A FORWARD -p tcp -m mark --mark $IP6_MARK -j ACCEPT
ip6tables -t filter -A FORWARD -p udp -m mark --mark $IP6_MARK -j ACCEPT
ip6tables -t filter -A FORWARD -m mark --mark $IP6_MARK -j ACCEPT

# SSHはローカルネットワークからのみ許可
ip6tables -A INPUT -p tcp -s $LOCAL_SOURCE --dport 22 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 22 -j DROP

# fd00::/64 宛の通信は全部WANに流す
ip6tables -t nat -A POSTROUTING -s $LOCAL_SOURCE -o $WAN_DEVICE -j MASQUERADE
}

# ポート解放
# Local とInternet から
# IP Address $IP Port $FORWARDING_PROT_NUMBERS 当てのパケットを
#$FORWARDING_DESTINATION に転送

set_iptables_input(){
iptables -t nat -I PREROUTING -d $IP4 -p $FORWARDING_PROTOCOL -m multiport --dports $FORWARDING_PROT_NUMBERS -j DNAT --to-destination $FORWARDING_DESTINATION:$FORWARDING_DESTINATION_NUMBERS
iptables -t nat -A POSTROUTING -o $LAN_DEVICE -s $FORWARDING_LOCAL_NET -d $FORWARDING_DESTINATION -p $FORWARDING_PROTOCOL -m multiport --dports $FORWARDING_DESTINATION_NUMBERS -j SNAT --to-source $IP4
}

set_tunnel
set_iptables_ip4_output
set_iptables_ip6_output

set_iptables_input
posted by kuma SF-Z at 00:06| Comment(0) | ソフトウェア 修理/改修