(решено) WAN static DNS + VPN PeerDNS = отсутствие DNS с pppX в /etc/resolv.conf

Цитата: RoxsAndy от 23/09/2018, 23:21Собственно где-то закрался "жук", который после инициализации IPv6 перегенерирует resolv.conf с нуля, но при этом не учитывает, что было поднято VPN-соединение и в resolv.conf были добавлены DNS-сервера, полученные с ppp-интерфейса.
На WAN - static + manual DNS 8.8.8.8/77.88.8.8
На VPN включено PeerDNS
6to4 - включенно IP6 over VPN и radvd+dhcp6
Собственно логи:
Sep 24 00:08:21 vpnhelper-pppoe: ==================START-PPPOE-CLIENT======================= Sep 24 00:08:21 vpnhelper-pppoe: PPPOE connect over eth2.2 to rp_pppoe_service ESILNET Sep 24 00:08:21 usbctrl(3742): TYPE=9/0/0 INTERFACE=9/0/0 Sep 24 00:08:22 pppd[3756]: Plugin /lib/rp-pppoe.so loaded. Sep 24 00:08:22 pppd[3756]: RP-PPPoE plugin version 3.12 compiled against pppd 2.4.7 Sep 24 00:08:22 pppd[3756]: pppd 2.4.7 started by daemon, uid 0 Sep 24 00:08:22 pppd[3756]: PPP session is 150 (0x96) Sep 24 00:08:22 pppd[3756]: Connected to 90:e2:ba:4a:9c:e0 via interface eth2.2 Sep 24 00:08:22 pppd[3756]: Using interface ppp0 Sep 24 00:08:22 pppd[3756]: Connect: ppp0 <--> eth2.2 Sep 24 00:08:22 pppd[3756]: PAP authentication succeeded Sep 24 00:08:22 pppd[3756]: peer from calling number 90:E2:BA:4A:9C:E0 authorized Sep 24 00:08:22 usbctrl(3744): TYPE=9/0/0 INTERFACE=9/0/0 Sep 24 00:08:22 pppd[3756]: local IP address 176.108.68.247 Sep 24 00:08:22 pppd[3756]: remote IP address 172.16.189.254 Sep 24 00:08:22 pppd[3756]: primary DNS address 176.108.64.20 Sep 24 00:08:22 pppd[3756]: secondary DNS address 176.108.64.20 Sep 24 00:08:23 pppd: Store old default route to file. default via 10.4.0.254 dev eth2.2 Sep 24 00:08:23 pppd: Remove vpnDGW Sep 24 00:08:23 pppd: Replace default route to ppp0 Sep 24 00:08:23 pppd: Replace DNS from pppd Sep 24 00:08:23 pppd: Flush route cache Sep 24 00:08:23 pppd: Restart dns server, dyndns, ntp sync and rebuild shaper and iptables rules Sep 24 00:08:23 services: Restart needed services and scripts. Mode pppd Sep 24 00:08:23 kernel: br0: port 1(eth2.1) entered forwarding state Sep 24 00:08:24 QoS: Stopping SHAPER Sep 24 00:08:26 kernel: br0: port 2(ra0) entered forwarding state Sep 24 00:08:26 iptables: Add netfiler rules Sep 24 00:08:26 iptables: Allow established/related in input Sep 24 00:08:26 iptables: Drop invalid state connections Sep 24 00:08:26 iptables: Service limit set Sep 24 00:08:26 iptables: DHCP server allow Sep 24 00:08:27 iptables: Dnsproxy allow to connect Sep 24 00:08:27 iptables: allow local port range 32768:61000 from LAN, need for some local service Sep 24 00:08:27 iptables: UPNP allow to connect Sep 24 00:08:27 iptables: Remote managment web limit Sep 24 00:08:27 iptables: Remote managment ssh limit Sep 24 00:08:27 iptables: Remote managment telnet limit Sep 24 00:08:27 iptables: Allow rate limited ping from all interfaces. Sep 24 00:08:27 iptables: Set forward rules Sep 24 00:08:27 iptables: Set macipport filter rules Sep 24 00:08:27 iptables: Allow forward from LAN to any Sep 24 00:08:27 iptables: Add SNAT from 192.168.74.1/255.255.255.0 to 10.32.5.11 at eth2.2. Sep 24 00:08:27 iptables: Call to add VPN netfilter rules. Sep 24 00:08:27 iptables: Add base upnp rules Sep 24 00:08:27 iptables: Allow established/related in forward Sep 24 00:08:27 iptables: V6: Add netfiler rules Sep 24 00:08:27 iptables: V6: Allow established/related in input Sep 24 00:08:27 iptables: V6: Dnsproxy allow to connect Sep 24 00:08:27 iptables: V6: allow local port range 32768:61000 from LAN, need for some local service Sep 24 00:08:27 iptables: V6: Allow ratelimited icmp echo requests to router. Sep 24 00:08:27 iptables: V6: Allow ratelimited icmp echo requests to clients. Sep 24 00:08:27 iptables: V6: Add base upnp rules Sep 24 00:08:27 iptables: V6: UPNP allow to connect Sep 24 00:08:27 iptables: Allow established/related in forward Sep 24 00:08:27 ipv6: Stop dhcp6s. Sep 24 00:08:27 ipv6: Deconfigure ipv6 interfaces/route. Sep 24 00:08:28 kernel: IPv6 over IPv4 tunneling driver Sep 24 00:08:28 ipv6: Tunel ipv6 to ipv4 configure and up at sit0 interface Sep 24 00:08:28 ipv6: Add adress 2002:b06c:44f7::1/16 to sit0 Sep 24 00:08:28 ipv6: MTU WAN: 1492 LAN: 1432 Sep 24 00:08:28 ipv6: Set mtu 1472 to sit0 Sep 24 00:08:28 ipv6: Add route to 2000::/3 via ::192.88.99.1 dev sit0 Sep 24 00:08:28 ipv6: Used tunneled ipv6 mode, disable forward from real wan interfaces (security reason), enable foe sit0. Sep 24 00:08:28 ipv6: Used tunneled ipv6 mode, not need ipv6 adress and route at wan ifaces - drop it (security reason). Sep 24 00:08:28 ipv6: Set 2002:b06c:44f7:2000::1/64 to br0 Sep 24 00:08:28 ipv6: Configure and start radvd and dhcpv6 server Sep 24 00:08:28 ipv6: Use user manual configured DNS 2001:4860:4860::8888 2a02:6b8::feed:0ff Sep 24 00:08:28 ipv6: Use local DNS server as relay and local ipv6 hosts resolve 2002:b06c:44f7:2000::1 Sep 24 00:08:28 ipv6: MTU WAN: 1492 LAN: 1432 Sep 24 00:08:28 ipv6: Configure radvd Sep 24 00:08:28 ipv6: Starting radvd Sep 24 00:08:28 ipv6: Configure dhcp6s Sep 24 00:08:28 ipv6: Starting dhcp6s Sep 24 00:08:28 radvd[4376]: version 2.17 started Sep 24 00:08:28 resolv: Generate resolv DNS1: 8.8.8.8 DNS2: 77.88.8.8 Sep 24 00:08:28 resolv: Add user ipv6 servers 2001:4860:4860::8888 2a02:6b8::feed:0ff for local resolv Sep 24 00:08:29 dnsserver: Generate /etc/hosts file. Sep 24 00:08:29 dnsserver: Send HUP to dnsmasq. Sep 24 00:08:29 dnsmasq[1107]: read /etc/hosts - 51 addresses Sep 24 00:08:29 dnsmasq[1107]: using nameserver 10.4.0.1#53 for domain esilnet.com Sep 24 00:08:29 dnsmasq[1107]: using nameserver 8.8.8.8#53 Sep 24 00:08:29 dnsmasq[1107]: using nameserver 77.88.8.8#53 Sep 24 00:08:29 dnsmasq[1107]: using nameserver 2001:4860:4860::8888#53 Sep 24 00:08:29 dnsmasq[1107]: using nameserver 2a02:6b8::feed:ff#53 Sep 24 00:08:29 ntp: Stopping NTPD Sep 24 00:08:29 ntp: Starting NTPD Sep 24 00:08:29 upnpd: Stoping UPNP Sep 24 00:08:30 miniupnpd[3174]: shutting down MiniUPnPd Sep 24 00:08:30 upnpd: Starting UPNP at 176.108.68.247 Sep 24 00:08:31 miniupnpd[4641]: version 2.1 started Sep 24 00:08:31 miniupnpd[4641]: HTTP listening on port 42522 Sep 24 00:08:31 miniupnpd[4641]: HTTP IPv6 address given to control points : [2002:b06c:44f7:2000::1] Sep 24 00:08:31 miniupnpd[4641]: Listening for NAT-PMP/PCP traffic on port 5351 Sep 24 00:08:31 pppd: Enable forwarding for ppp0 interface Sep 24 00:09:06 pppd[3756]: System time change detected.И с консоли:
[Wive-MT@/]# cat /etc/resolv.conf domain Wive-MT.lo nameserver 8.8.8.8 nameserver 77.88.8.8 nameserver 2001:4860:4860::8888 nameserver 2a02:6b8::feed:0ff [Wive-MT@/]# cat /tmp/resolv.ppp0 nameserver 176.108.64.20 nameserver 176.108.64.20 domain Wive-MT.lo nameserver 8.8.8.8 nameserver 77.88.8.8 nameserver 2001:4860:4860::8888 nameserver 2a02:6b8::feed:0ffPS. Есть подозрение, что это из-за статик WAN.
Собственно где-то закрался "жук", который после инициализации IPv6 перегенерирует resolv.conf с нуля, но при этом не учитывает, что было поднято VPN-соединение и в resolv.conf были добавлены DNS-сервера, полученные с ppp-интерфейса.
На WAN - static + manual DNS 8.8.8.8/77.88.8.8
На VPN включено PeerDNS
6to4 - включенно IP6 over VPN и radvd+dhcp6
Собственно логи:
Sep 24 00:08:21 vpnhelper-pppoe: ==================START-PPPOE-CLIENT======================= Sep 24 00:08:21 vpnhelper-pppoe: PPPOE connect over eth2.2 to rp_pppoe_service ESILNET Sep 24 00:08:21 usbctrl(3742): TYPE=9/0/0 INTERFACE=9/0/0 Sep 24 00:08:22 pppd[3756]: Plugin /lib/rp-pppoe.so loaded. Sep 24 00:08:22 pppd[3756]: RP-PPPoE plugin version 3.12 compiled against pppd 2.4.7 Sep 24 00:08:22 pppd[3756]: pppd 2.4.7 started by daemon, uid 0 Sep 24 00:08:22 pppd[3756]: PPP session is 150 (0x96) Sep 24 00:08:22 pppd[3756]: Connected to 90:e2:ba:4a:9c:e0 via interface eth2.2 Sep 24 00:08:22 pppd[3756]: Using interface ppp0 Sep 24 00:08:22 pppd[3756]: Connect: ppp0 <--> eth2.2 Sep 24 00:08:22 pppd[3756]: PAP authentication succeeded Sep 24 00:08:22 pppd[3756]: peer from calling number 90:E2:BA:4A:9C:E0 authorized Sep 24 00:08:22 usbctrl(3744): TYPE=9/0/0 INTERFACE=9/0/0 Sep 24 00:08:22 pppd[3756]: local IP address 176.108.68.247 Sep 24 00:08:22 pppd[3756]: remote IP address 172.16.189.254 Sep 24 00:08:22 pppd[3756]: primary DNS address 176.108.64.20 Sep 24 00:08:22 pppd[3756]: secondary DNS address 176.108.64.20 Sep 24 00:08:23 pppd: Store old default route to file. default via 10.4.0.254 dev eth2.2 Sep 24 00:08:23 pppd: Remove vpnDGW Sep 24 00:08:23 pppd: Replace default route to ppp0 Sep 24 00:08:23 pppd: Replace DNS from pppd Sep 24 00:08:23 pppd: Flush route cache Sep 24 00:08:23 pppd: Restart dns server, dyndns, ntp sync and rebuild shaper and iptables rules Sep 24 00:08:23 services: Restart needed services and scripts. Mode pppd Sep 24 00:08:23 kernel: br0: port 1(eth2.1) entered forwarding state Sep 24 00:08:24 QoS: Stopping SHAPER Sep 24 00:08:26 kernel: br0: port 2(ra0) entered forwarding state Sep 24 00:08:26 iptables: Add netfiler rules Sep 24 00:08:26 iptables: Allow established/related in input Sep 24 00:08:26 iptables: Drop invalid state connections Sep 24 00:08:26 iptables: Service limit set Sep 24 00:08:26 iptables: DHCP server allow Sep 24 00:08:27 iptables: Dnsproxy allow to connect Sep 24 00:08:27 iptables: allow local port range 32768:61000 from LAN, need for some local service Sep 24 00:08:27 iptables: UPNP allow to connect Sep 24 00:08:27 iptables: Remote managment web limit Sep 24 00:08:27 iptables: Remote managment ssh limit Sep 24 00:08:27 iptables: Remote managment telnet limit Sep 24 00:08:27 iptables: Allow rate limited ping from all interfaces. Sep 24 00:08:27 iptables: Set forward rules Sep 24 00:08:27 iptables: Set macipport filter rules Sep 24 00:08:27 iptables: Allow forward from LAN to any Sep 24 00:08:27 iptables: Add SNAT from 192.168.74.1/255.255.255.0 to 10.32.5.11 at eth2.2. Sep 24 00:08:27 iptables: Call to add VPN netfilter rules. Sep 24 00:08:27 iptables: Add base upnp rules Sep 24 00:08:27 iptables: Allow established/related in forward Sep 24 00:08:27 iptables: V6: Add netfiler rules Sep 24 00:08:27 iptables: V6: Allow established/related in input Sep 24 00:08:27 iptables: V6: Dnsproxy allow to connect Sep 24 00:08:27 iptables: V6: allow local port range 32768:61000 from LAN, need for some local service Sep 24 00:08:27 iptables: V6: Allow ratelimited icmp echo requests to router. Sep 24 00:08:27 iptables: V6: Allow ratelimited icmp echo requests to clients. Sep 24 00:08:27 iptables: V6: Add base upnp rules Sep 24 00:08:27 iptables: V6: UPNP allow to connect Sep 24 00:08:27 iptables: Allow established/related in forward Sep 24 00:08:27 ipv6: Stop dhcp6s. Sep 24 00:08:27 ipv6: Deconfigure ipv6 interfaces/route. Sep 24 00:08:28 kernel: IPv6 over IPv4 tunneling driver Sep 24 00:08:28 ipv6: Tunel ipv6 to ipv4 configure and up at sit0 interface Sep 24 00:08:28 ipv6: Add adress 2002:b06c:44f7::1/16 to sit0 Sep 24 00:08:28 ipv6: MTU WAN: 1492 LAN: 1432 Sep 24 00:08:28 ipv6: Set mtu 1472 to sit0 Sep 24 00:08:28 ipv6: Add route to 2000::/3 via ::192.88.99.1 dev sit0 Sep 24 00:08:28 ipv6: Used tunneled ipv6 mode, disable forward from real wan interfaces (security reason), enable foe sit0. Sep 24 00:08:28 ipv6: Used tunneled ipv6 mode, not need ipv6 adress and route at wan ifaces - drop it (security reason). Sep 24 00:08:28 ipv6: Set 2002:b06c:44f7:2000::1/64 to br0 Sep 24 00:08:28 ipv6: Configure and start radvd and dhcpv6 server Sep 24 00:08:28 ipv6: Use user manual configured DNS 2001:4860:4860::8888 2a02:6b8::feed:0ff Sep 24 00:08:28 ipv6: Use local DNS server as relay and local ipv6 hosts resolve 2002:b06c:44f7:2000::1 Sep 24 00:08:28 ipv6: MTU WAN: 1492 LAN: 1432 Sep 24 00:08:28 ipv6: Configure radvd Sep 24 00:08:28 ipv6: Starting radvd Sep 24 00:08:28 ipv6: Configure dhcp6s Sep 24 00:08:28 ipv6: Starting dhcp6s Sep 24 00:08:28 radvd[4376]: version 2.17 started Sep 24 00:08:28 resolv: Generate resolv DNS1: 8.8.8.8 DNS2: 77.88.8.8 Sep 24 00:08:28 resolv: Add user ipv6 servers 2001:4860:4860::8888 2a02:6b8::feed:0ff for local resolv Sep 24 00:08:29 dnsserver: Generate /etc/hosts file. Sep 24 00:08:29 dnsserver: Send HUP to dnsmasq. Sep 24 00:08:29 dnsmasq[1107]: read /etc/hosts - 51 addresses Sep 24 00:08:29 dnsmasq[1107]: using nameserver 10.4.0.1#53 for domain esilnet.com Sep 24 00:08:29 dnsmasq[1107]: using nameserver 8.8.8.8#53 Sep 24 00:08:29 dnsmasq[1107]: using nameserver 77.88.8.8#53 Sep 24 00:08:29 dnsmasq[1107]: using nameserver 2001:4860:4860::8888#53 Sep 24 00:08:29 dnsmasq[1107]: using nameserver 2a02:6b8::feed:ff#53 Sep 24 00:08:29 ntp: Stopping NTPD Sep 24 00:08:29 ntp: Starting NTPD Sep 24 00:08:29 upnpd: Stoping UPNP Sep 24 00:08:30 miniupnpd[3174]: shutting down MiniUPnPd Sep 24 00:08:30 upnpd: Starting UPNP at 176.108.68.247 Sep 24 00:08:31 miniupnpd[4641]: version 2.1 started Sep 24 00:08:31 miniupnpd[4641]: HTTP listening on port 42522 Sep 24 00:08:31 miniupnpd[4641]: HTTP IPv6 address given to control points : [2002:b06c:44f7:2000::1] Sep 24 00:08:31 miniupnpd[4641]: Listening for NAT-PMP/PCP traffic on port 5351 Sep 24 00:08:31 pppd: Enable forwarding for ppp0 interface Sep 24 00:09:06 pppd[3756]: System time change detected.
И с консоли:
[Wive-MT@/]# cat /etc/resolv.conf domain Wive-MT.lo nameserver 8.8.8.8 nameserver 77.88.8.8 nameserver 2001:4860:4860::8888 nameserver 2a02:6b8::feed:0ff [Wive-MT@/]# cat /tmp/resolv.ppp0 nameserver 176.108.64.20 nameserver 176.108.64.20 domain Wive-MT.lo nameserver 8.8.8.8 nameserver 77.88.8.8 nameserver 2001:4860:4860::8888 nameserver 2a02:6b8::feed:0ff
PS. Есть подозрение, что это из-за статик WAN.

Цитата: sfstudio от 24/09/2018, 00:09Конфиг прилепите (или лучше на мыло что бы адреса и прочее не затирать т.е. один в один проверить). Освобожусь чутка гляну. Скорее всего да, при статик wan+6t04 что-то не учёл.
Ну а вообще 6to4 deprecated и связность при доступе через него у того же ТТК сломана давно. И думаю не только у ТТК, половина ресурсов ведёт вникуда + проблемы с гуглкэшем и т.д. Так что если ваш оператор не предоставляет нативного ipv6 то не стоит наверное и заморачиваться. К проблеме отношения не имеет, но вот такой вот факт.
Конфиг прилепите (или лучше на мыло что бы адреса и прочее не затирать т.е. один в один проверить). Освобожусь чутка гляну. Скорее всего да, при статик wan+6t04 что-то не учёл.
Ну а вообще 6to4 deprecated и связность при доступе через него у того же ТТК сломана давно. И думаю не только у ТТК, половина ресурсов ведёт вникуда + проблемы с гуглкэшем и т.д. Так что если ваш оператор не предоставляет нативного ipv6 то не стоит наверное и заморачиваться. К проблеме отношения не имеет, но вот такой вот факт.

Цитата: RoxsAndy от 24/09/2018, 00:17Конфиг (пароли и явки потёр)
Конфиг (пароли и явки потёр)

Цитата: RoxsAndy от 24/09/2018, 00:42Немного поискал причину и наткнулся, что такое поведение у логики при Static WAN + IPv6 (любое!!!), т.е. не зависит от типа IPv6.
Конфиг /etc/resolv.conf после инициализации ipv6 генерируется с нуля.
PS. Попутно выяснилось, что radvd не хочет работать с Prefix Length отличным от /64. Чудесато, с учётом того, что для 6to4 маска должна быть вроде как /48.
Немного поискал причину и наткнулся, что такое поведение у логики при Static WAN + IPv6 (любое!!!), т.е. не зависит от типа IPv6.
Конфиг /etc/resolv.conf после инициализации ipv6 генерируется с нуля.
PS. Попутно выяснилось, что radvd не хочет работать с Prefix Length отличным от /64. Чудесато, с учётом того, что для 6to4 маска должна быть вроде как /48.

Цитата: sfstudio от 24/09/2018, 11:13Да оно и должно перегенериться. Проблема то не в факте перегенерирования. Тут проблема в том, что резол для ppp генериться в ip-up и там же комбинируется с основным.
Вот это надо будет наверное переделать совсем по другому. Сейчас пока некогда.
Переписывается оно потому что в services_restart.sh вызывается service resolv restart а в S30resolv нет обработки ppp dns.
И это не всё. ipv4+dhcp генериться резолв из dhcp скрипта.
Это всё исторически сложившаяся логика которую пора переделать но всё руки не дойдут.
По 6to4 традиционно схема такая, выделяется /48 при этом юзверь может нарезать её на несколько сетей /64. Так уж сложилось и radvd именно этой схемы придерживается.
Да оно и должно перегенериться. Проблема то не в факте перегенерирования. Тут проблема в том, что резол для ppp генериться в ip-up и там же комбинируется с основным.
Вот это надо будет наверное переделать совсем по другому. Сейчас пока некогда.
Переписывается оно потому что в services_restart.sh вызывается service resolv restart а в S30resolv нет обработки ppp dns.
И это не всё. ipv4+dhcp генериться резолв из dhcp скрипта.
Это всё исторически сложившаяся логика которую пора переделать но всё руки не дойдут.
По 6to4 традиционно схема такая, выделяется /48 при этом юзверь может нарезать её на несколько сетей /64. Так уж сложилось и radvd именно этой схемы придерживается.

Цитата: sfstudio от 24/09/2018, 11:17В вашем случае для решения первой проблемы скорее всего хватит в services_restart.sh блок
if [ "$wan_static_dns" = "on" ]; then service resolv restart fiпривести к виду
if [ "$wan_static_dns" = "on" ] && [ "$MODE" != "pppd" ]; then service resolv restart fiНа досуге почешу репу как лучше сделать.
В вашем случае для решения первой проблемы скорее всего хватит в services_restart.sh блок
if [ "$wan_static_dns" = "on" ]; then service resolv restart fi
привести к виду
if [ "$wan_static_dns" = "on" ] && [ "$MODE" != "pppd" ]; then service resolv restart fi
На досуге почешу репу как лучше сделать.

Цитата: sfstudio от 24/09/2018, 11:37Придумал как сделать безопаснее. См последний коммит в гит. Ну и подвинул в туду это дело на рефакторинг. Уже откровенно пора это дело привести в человеческий вид, а не таскать за собой когда-то 300 лет назад рождённый код.
Плз проверить и сразу соберу версию с фиксом в паблик.
Придумал как сделать безопаснее. См последний коммит в гит. Ну и подвинул в туду это дело на рефакторинг. Уже откровенно пора это дело привести в человеческий вид, а не таскать за собой когда-то 300 лет назад рождённый код.
Плз проверить и сразу соберу версию с фиксом в паблик.

Цитата: RoxsAndy от 24/09/2018, 19:28К сожалению, смогу проверить только ближе к выходным. Отпуск закончился, пошла рутина.... :(
К сожалению, смогу проверить только ближе к выходным. Отпуск закончился, пошла рутина.... :(

Цитата: sfstudio от 25/09/2018, 00:36Я локально проверил и опубликовал уже. Как сможете подтвердить - отпишитесь.
Я локально проверил и опубликовал уже. Как сможете подтвердить - отпишитесь.

Цитата: RoxsAndy от 25/09/2018, 10:48Руки дошли немного раньше до проверки, отписываюсь.
В таком варианте как опубликовали не работает, потому что забыли переменную vpnEnabled из nvram "подтянуть", если подправить get_param, то да, теперь все dns-сервера подтягиваются и от прова, и из статики.
Руки дошли немного раньше до проверки, отписываюсь.
В таком варианте как опубликовали не работает, потому что забыли переменную vpnEnabled из nvram "подтянуть", если подправить get_param, то да, теперь все dns-сервера подтягиваются и от прова, и из статики.

Цитата: sfstudio от 25/09/2018, 14:00Блин, как забадали 100500 песочниц.... Не на ту ветку наложил вторую часть патча с чисткой переменных и инклудом global.sh. Поправил пасиб.
Блин, как забадали 100500 песочниц.... Не на ту ветку наложил вторую часть патча с чисткой переменных и инклудом global.sh. Поправил пасиб.