Мне интересно, как туннелировать трафик tcp / ipv6 через туннель ssh / ipv4 (соединение ptp). Является ли это возможным? Как я могу этого добиться?
Да, это возможно и не слишком сложно, но решение очень неоптимальное, поскольку SSH работает поверх TCP и имеет разумные накладные расходы.
Сервер должен иметь в своем файле конфигурации sshd_config
:
PermitTunnel point-to-point
Затем вам нужно быть root на обе машины. Вы подключаетесь к серверу, используя:
ssh -w any root@server
После подключения используйте команду ip link
в обеих системах, чтобы знать, какие ТУНН устройство было создано в каждом из них, и используйте его в следующих командах. Обратите внимание, что я использую примеры локальных адресов сайта, которые устарели, но подходят для этого введения.
На сервере:
server# ip link set tun0 up
server# ip addr add fec0:1::1/112 dev tun0
На клиенте:
client# ip link set tun0 up
client# ip addr add fec0:1::2/112 dev tun0
Этого достаточно, чтобы вы могли пропинговать другую сторону через туннель, если нет блокировки правил брандмауэра. Следующим шагом является установка маршрутов через туннель (не забывайте net.ipv6.conf.default.forwarding = 1), а затем настройте MTU канала для достижения оптимальной производительности.
server# sysctl net.ipv6.conf.all.forwarding=1
client# ip -6 route add default via fec0:1::1
Это позволит вашему клиенту пинговать другие сети, к которым у сервера есть доступ, при условии, что у целей есть маршруты обратно к вашему удаленному клиенту.
Вам также нужно будет исправить MTU ссылки, чтобы клиент не отправлял пакеты, которые сервер не сможет передать вперед. Это зависит от MTU канала IPv6 самого сервера. Не полагайтесь на определение MTU пути, поскольку оно не будет работать правильно через туннель SSH. В случае сомнений начните с низкого значения MTU, например 1280 (минимальный допустимый MTU для IPv6).