Deprecated: Creation of dynamic property wpdb::$categories is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 668

Deprecated: Creation of dynamic property wpdb::$post2cat is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 668

Deprecated: Creation of dynamic property wpdb::$link2cat is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 668

Deprecated: Return type of WP_Theme::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-theme.php on line 554

Deprecated: Return type of WP_Theme::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-theme.php on line 595

Deprecated: Return type of WP_Theme::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-theme.php on line 535

Deprecated: Return type of WP_Theme::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-theme.php on line 544

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-includes/comment-template.php on line 1745

Deprecated: wp_getimagesize(): Implicitly marking parameter $image_info as nullable is deprecated, the explicit nullable type must be used instead in /home/inovacao/public_html/yeapf.com/wp/wp-includes/media.php on line 5072

Deprecated: Return type of WP_REST_Request::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-request.php on line 960

Deprecated: Return type of WP_REST_Request::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-request.php on line 980

Deprecated: Return type of WP_REST_Request::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-request.php on line 992

Deprecated: Return type of WP_REST_Request::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-request.php on line 1003

Deprecated: Return type of WP_Block_List::current() should either be compatible with Iterator::current(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 151

Deprecated: Return type of WP_Block_List::next() should either be compatible with Iterator::next(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 175

Deprecated: Return type of WP_Block_List::key() should either be compatible with Iterator::key(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 164

Deprecated: Return type of WP_Block_List::valid() should either be compatible with Iterator::valid(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 186

Deprecated: Return type of WP_Block_List::rewind() should either be compatible with Iterator::rewind(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 138

Deprecated: Return type of WP_Block_List::offsetExists($index) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 75

Deprecated: Return type of WP_Block_List::offsetGet($index) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 89

Deprecated: Return type of WP_Block_List::offsetSet($index, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 110

Deprecated: Return type of WP_Block_List::offsetUnset($index) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 127

Deprecated: Return type of WP_Block_List::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 199

Deprecated: Jetpack::setup_xmlrpc_handlers(): Implicitly marking parameter $xmlrpc_server as nullable is deprecated, the explicit nullable type must be used instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/class.jetpack.php on line 934

Deprecated: Automattic\Jetpack\Connection\Manager::setup_xmlrpc_handlers(): Implicitly marking parameter $xmlrpc_server as nullable is deprecated, the explicit nullable type must be used instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/vendor/automattic/jetpack-connection/src/class-manager.php on line 123

Deprecated: Creation of dynamic property Automattic\Jetpack\Connection\Manager::$error_handler is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/vendor/automattic/jetpack-connection/src/class-manager.php on line 93

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Instagram_Gallery::$is_wpcom is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-instagram-gallery.php on line 23

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Mailchimp::$wpcom_is_wpcom_only_endpoint is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-mailchimp.php on line 17

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Tweetstorm_Gather::$wpcom_is_wpcom_only_endpoint is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-tweetstorm-gather.php on line 21

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Tweetstorm_Gather::$is_wpcom is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-tweetstorm-gather.php on line 22

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Gutenberg_Available_Extensions::$wpcom_is_site_specific_endpoint is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/gutenberg-available-extensions.php on line 20

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Memberships::$wpcom_is_wpcom_only_endpoint is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/memberships.php on line 23

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Memberships::$wpcom_is_site_specific_endpoint is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/memberships.php on line 24

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Subscribers::$wpcom_is_wpcom_only_endpoint is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/subscribers.php on line 15

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/extensions/blocks/podcast-player/podcast-player.php on line 160

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/extensions/blocks/podcast-player/podcast-player.php on line 160

Deprecated: Creation of dynamic property POMO_FileReader::$is_overloaded is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/streams.php on line 26

Deprecated: Creation of dynamic property POMO_FileReader::$_pos is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/streams.php on line 29

Deprecated: Creation of dynamic property POMO_FileReader::$_f is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/streams.php on line 160

Deprecated: Creation of dynamic property MO::$_gettext_select_plural_form is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/translations.php on line 293

Deprecated: Creation of dynamic property Automattic\Jetpack\Sync\Queue::$random_int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/vendor/automattic/jetpack-sync/src/class-queue.php on line 38

Deprecated: Creation of dynamic property Automattic\Jetpack\Sync\Queue::$random_int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/vendor/automattic/jetpack-sync/src/class-queue.php on line 38

Deprecated: Creation of dynamic property Publicize_UI::$in_jetpack is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/publicize.php on line 53

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/widgets/migrate-to-core/image-widget.php on line 195

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/widgets/migrate-to-core/gallery-widget.php on line 56

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/calypsoify/class-jetpack-calypsoify.php on line 130

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/calypsoify/class-jetpack-calypsoify.php on line 131

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/calypsoify/class-jetpack-calypsoify.php on line 135

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/calypsoify/class-jetpack-calypsoify.php on line 136

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/calypsoify/class-jetpack-calypsoify.php on line 137

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 219

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 220

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 227

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 229

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 231

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 248

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 249

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 267

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 268

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 270

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 271

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 273

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 275

Deprecated: Creation of dynamic property POMO_FileReader::$is_overloaded is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/streams.php on line 26

Deprecated: Creation of dynamic property POMO_FileReader::$_pos is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/streams.php on line 29

Deprecated: Creation of dynamic property POMO_FileReader::$_f is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/streams.php on line 160

Deprecated: Creation of dynamic property MO::$_gettext_select_plural_form is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/translations.php on line 293

Deprecated: Creation of dynamic property WPCOM_Widget_Goodreads::$shelves is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/widgets/goodreads.php on line 33

Deprecated: DateTime::__construct(): Passing null to parameter #1 ($datetime) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/script-loader.php on line 333

Deprecated: Creation of dynamic property WP_Block_Type::$skip_inner_blocks is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property Jetpack_Shortcode_Unavailable::$shortcodes is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/shortcodes/unavailable.php on line 19

Deprecated: Calling get_class() without arguments is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-http.php on line 328

Deprecated: Return type of Requests_Cookie_Jar::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Cookie/Jar.php on line 63

Deprecated: Return type of Requests_Cookie_Jar::offsetGet($key) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Cookie/Jar.php on line 73

Deprecated: Return type of Requests_Cookie_Jar::offsetSet($key, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Cookie/Jar.php on line 89

Deprecated: Return type of Requests_Cookie_Jar::offsetUnset($key) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Cookie/Jar.php on line 102

Deprecated: Return type of Requests_Cookie_Jar::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Cookie/Jar.php on line 111

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 40

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetGet($key) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 51

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetSet($key, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 68

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetUnset($key) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 82

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 91

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673

Deprecated: Calling get_class() without arguments is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-http.php on line 328

Deprecated: http_build_query(): Passing null to parameter #2 ($numeric_prefix) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Transport/cURL.php on line 345

Deprecated: Requests_Cookie::parse_from_headers(): Implicitly marking parameter $origin as nullable is deprecated, the explicit nullable type must be used instead in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Cookie.php on line 439

Deprecated: ltrim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 3030

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: ltrim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 3030

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: ltrim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 3030

Deprecated: ltrim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 3030

Deprecated: Creation of dynamic property Jetpack_Carousel::$localize_strings is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/carousel/jetpack-carousel.php on line 353

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: ltrim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 3030

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673
{"id":201,"date":"2014-12-29T15:49:05","date_gmt":"2014-12-29T17:49:05","guid":{"rendered":"http:\/\/inovacaosistemas.com.br\/wp\/?p=201"},"modified":"2015-05-23T12:12:44","modified_gmt":"2015-05-23T14:12:44","slug":"roteadores-linux-redundantes-de-baixo-custo","status":"publish","type":"post","link":"http:\/\/www.yeapf.com\/wp\/?p=201","title":{"rendered":"Roteadores Linux redundantes de baixo custo"},"content":{"rendered":"
Um pouco de hist\u00f3ria<\/h5>\n

Recentemente me vi na obriga\u00e7\u00e3o de dividir um servidor Linux em dois pois nele coincidiam duas linhas de acesso \u00e0 internet concentrando o tr\u00e1fego e distribuindo o mesmo conforme necess\u00e1rio entre as duas linhas de acesso.<\/p>\n

Quem me conhece sabe que sou p\u00e3o duro com dinheiro alheio. Relutei bastante em dividir o servidor j\u00e1 que n\u00e3o fazia sentido ter dois quando um s\u00f3 dava conta do servi\u00e7o. Ent\u00e3o desde meados de 2008 at\u00e9 final de 2014 estamos trabalhando com o mesmo servidor que herdamos de um outro t\u00e9cnico e por sinal estava muito bem feito.<\/p>\n

Bem, o caso \u00e9 que um ataque, um v\u00edrus, uma TPM atrasada, seja l\u00e1 o que for, pode deixar o roteador fora de combate e \u00e9 nessas horas que voc\u00ea almejaria ter a simplicidade de funcionamento de uma tomada em que simplesmente tirar de um lado e colocar no outro resolveria todo o problema e seus clientes nem saberiam da sua exist\u00eancia (ou da exist\u00eancia da sua m\u00e3e, o que \u00e9 pior)<\/p>\n

Ent\u00e3o, contrario a tudo o que tenho feito, decidi que \u00e9 melhor ter dois do que um mesmo que isso me duplique o servi\u00e7o de manuten\u00e7\u00e3o e cuidados.<\/p>\n

Aten\u00e7\u00e3o<\/span><\/strong><\/h5>\n

Isto \u00e9 s\u00f3 um relato de experi\u00eancia muito particular que deu certo em um ambiente muito especifico. Disponibilizo esta informa\u00e7\u00e3o de forma gratuita e livre no intuito de ajudar tecnicamente qualquer colega mas n\u00e3o sugiro a coloca\u00e7\u00e3o deste script em ambiente de produ\u00e7\u00e3o.<\/span> <\/strong><\/p>\n

Prop\u00f3sito<\/h5>\n

Como sou um ser humano comum e almejo sombra e \u00e1gua fresca quase que constantemente, decidi fazer um par de scripts configur\u00e1veis que disponibilizo para quem queira utilizar. O que procuro \u00e9 que sem andar mexendo muito, os dois servidores se virem para alternarem a posi\u00e7\u00e3o de roteador da rede. Quero chegar num ponto em que possa por telefone dizer para o t\u00e9cnico do outro lado alguma coisa como “S\u00f3 arranca o cabo amarelo do micro B que o A assume tudo” ou alguma coisa assim.<\/p>\n

Ingredientes necess\u00e1rios<\/h5>\n

Eu constru\u00ed o que lhes vou passar usando m\u00e1quinas equipadas com Ubuntu e CentOS, mas qualquer coisa que seja herdeira de Debian e Red Hat tem que funcionar. A quantidade de mem\u00f3ria e o espa\u00e7o em HD n\u00e3o s\u00e3o importantes a n\u00e3o ser para o SQUID e outros servi\u00e7os.<\/p>\n

Os dois micros tem que estar conectados sobre uma mesma rede f\u00edsica. Preferivelmente cada um dos micros deve ter uma placa de rede dedicada para o ISP (o provedor de acesso \u00e0 internet). Depois vou trabalhar numa vers\u00e3o com switchs; por enquanto est\u00e1 bem assim.<\/p>\n

Em cada um deles, devemos ter o servidor ssh configurado e operacional. Demais est\u00e1 dizer que precisamos liberar no firewall o porto 22 (ou qualquer outro que voc\u00ea deseje para seu servidor ssh)<\/p>\n\n\n\n\n\n\n
Ubuntu<\/td>\n<\/tr>\n
\n
# se j\u00e1 tem o UFW instalado, pode pular esta parte at\u00e9 a libera\u00e7\u00e3o do porto 22\r\n$ apt-get update\r\n$ apt-get install ufw\r\n$ ufw enable\r\n\r\n# libere o porto 22\r\n$ ufw allow 22<\/pre>\n<\/td>\n<\/tr>\n
CentOS (At\u00e9 a vers\u00e3o 6)<\/td>\n<\/tr>\n
\n
nano \/etc\/sysconfig\/iptables\r\n# verifique que haja uma linha assim:\r\niptables -A INPUT -p tcp --dport 22 -j ACCEPT\r\n# depois volte ao console com ctrl-x e garanta o servi\u00e7o\r\nchkconfig iptables on\r\nservice iptables restart<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n

Ent\u00e3o, resumindo: Duas pequenas m\u00e1quinas Linux com duas placas de rede. E – obviamente – os scripts que podem ser pegos aqui: http:\/\/www.inovacaosistemas.com.br\/downloads\/testes\/route-sentry.zip<\/a><\/p>\n

Formando a irmandade<\/h5>\n

Antes de mais nada, voc\u00ea precisa fazer com que os dois micros se conhe\u00e7am mutuamente. Aos efeitos do nosso teste, assumiremos que a eth0 tem acesso \u00e0 internet enquanto que a eth1 \u00e9 a placa de acesso interno, ou seja a que fica exposta para nossa rede conforme a seguinte tabela:<\/p>\n\n\n\n\n\n\n\n
<\/td>\nMicro A<\/td>\nMicro B<\/td>\n<\/tr>\n
Fun\u00e7\u00e3o<\/td>\nRoteador Principal<\/td>\nRoteador Alternativo<\/td>\n<\/tr>\n
eth0<\/td>\n201.b.c.d<\/td>\n197.b.c.d<\/td>\n<\/tr>\n
eth1:monitor<\/td>\n10.0.0.1<\/td>\n10.0.0.2<\/td>\n<\/tr>\n
eth1:interna*<\/td>\n192.168.0.100<\/td>\n192.168.0.100<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n

A placa eth0<\/strong> e a eth1:monitor<\/strong> est\u00e3o configuradas como \u00e9 costume no seu servidor. Ou seja, o script n\u00e3o vai mexer com elas. A \u00fanica coisa que ele vai fazer \u00e9 alterar a configura\u00e7\u00e3o do eth1:interna<\/strong> que \u00e9 o roteador para toda sua rede interna. Em outras palavras, ora o Micro A assumir\u00e1 o papel de roteador da rede ora o Micro B. Repare que se voc\u00ea colocar a configura\u00e7\u00e3o do eth1:interna fixa em sua configura\u00e7\u00e3o, a sua rede n\u00e3o vai funcionar como esperado, j\u00e1 que ter\u00e1 um IP conflitante<\/span><\/p>\n

Para que a m\u00e1gica funcione, devemos dar a cada nodo um arquivo de configura\u00e7\u00e3o que permita ao script saber do seu parceiro e de como proceder.<\/p>\n

Para o Micro A, uma configura\u00e7\u00e3o v\u00e1lida seria a seguinte:<\/p>\n

[config]\r\nlogfile=\/var\/log\/rs.log\r\n\r\n[main]\r\ntarget=8.8.4.4 208.67.222.222\r\ninterface=eth0\r\nip=201.b.c.d<\/strong>\r\nmask=255.255.255.224\r\ngateway=201.b.c.x<\/strong>\r\n\r\n[internet]\r\nhost=http:\/\/www.msftncsi.com\/ncsi.txt\r\nexpectedReturn=Microsoft NCSI\r\n\r\n[helmet]\r\ninterface=eth1\r\nsibling=10.0.0.2<\/strong>\r\nsshport=22\r\nsshuser=root\r\nip1=192.168.0.100<\/span><\/em><\/pre>\n

J\u00e1 para o Micro B, precisar\u00edamos indicar uma configura\u00e7\u00e3o parecida com a seguinte:<\/p>\n

[config]\r\nlogfile=\/var\/log\/rs.log\r\n\r\n[main]\r\ntarget=8.8.4.4 208.67.222.222\r\ninterface=eth0\r\nip=197.b.c.d<\/strong>\r\nmask=255.255.255.224\r\ngateway=197.b.c.x<\/strong>\r\n\r\n[internet]\r\nhost=http:\/\/www.msftncsi.com\/ncsi.txt\r\nexpectedReturn=Microsoft NCSI\r\n\r\n[helmet]\r\ninterface=eth1\r\nsibling=10.0.0.1<\/strong>Nor\r\nsshport=22\r\nsshuser=root\r\nip1=192.168.0.100<\/span><\/em><\/pre>\n

Marquei em negrito<\/strong> o que muda de uma para outra no exemplo. Em resumo, cada um dos .ini tem a configura\u00e7\u00e3o do roteador real mais a do roteador irm\u00e3o. Essa \u00e9 a raz\u00e3o dos campos diferentes.
\nMarquei em verde<\/span><\/em> a linha IP1=192.168.0.100<\/span><\/em> pois esse IP \u00e9 o compartilhado entre os dois. \u00c9 esse o IP que o script far\u00e1 o micro assumir quando perceber que o irm\u00e3o dele n\u00e3o \u00e9 o roteador padr\u00e3o da rede.<\/p>\n

Repare tamb\u00e9m que para detectarmos se estamos conectados \u00e0 internet, estamos utilizando o mesmo mecanismo que o Windows7 utiliza mas nada lhe impede de utilizar um outro servi\u00e7o ou criar o seu pr\u00f3prio.\u00a0 Isto aqui s\u00e3o s\u00f3 dois exemplos.<\/p>\n\n\n\n\n\n
Servi\u00e7o<\/td>\nResultado<\/td>\n<\/tr>\n
\n
http:\/\/www.msftncsi.com\/ncsi.txt<\/pre>\n<\/td>\n
\n
Microsoft NCSI<\/pre>\n<\/td>\n<\/tr>\n
\n
http:\/\/www.inovacaosistemas.com.br\/internetAlive.txt<\/pre>\n<\/td>\n
\n
Internet Alive<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n

Para que os dois micros conversem, voc\u00ea deve compartilhar uma chave p\u00fablica com o parceiro. Os passos s\u00e3o bem simples e s\u00e3o id\u00eanticos para cada um dos micros.<\/p>\n

1) Primeiro crie um par de chaves no Micro A<\/p>\n

$ sudo ssh-keygen<\/strong> \r\nGenerating public\/private rsa key pair.\r\nEnter file in which to save the key (\/home\/root\/.ssh\/id_rsa): [enter]<\/strong>\r\nEnter passphrase (empty for no passphrase): [enter]<\/strong>\r\nEnter same passphrase again: [enter]<\/strong>\r\nYour identification has been saved in \/home\/root\/.ssh\/id_rsa.\r\nYour public key has been saved in \/home\/root\/.ssh\/id_rsa.pub.\r\nThe key fingerprint is:\r\nf4:91:ba:e0:be:dd:4d:df:2a:f2:1e:1e:e0:c4:03:d9 root@inovacaosistemas\r\n<\/pre>\n

2) Agora copie sua identidade para o Micro B<\/p>\n

$ sudo ssh-copy-id root@10.0.0.2<\/strong><\/pre>\n

Ele ir\u00e1 pedir a senha do root no micro B e se estiver certa (e seu firewall liberar e o servi\u00e7o de ssh estiver rodando no micro B) a sua identidade ter\u00e1 sido copiada para o micro B. Voc\u00ea pode conferir que foi com sucesso acessando o micro B sem senha como segue:<\/p>\n

$ ssh root@10.0.0.2 ls \/root\/<\/strong><\/pre>\n

3) Ele dever\u00e1 mostrar o conte\u00fado da pasta \/root\/ do micro B. Sem pedir a senha.<\/p>\n

Repita os passos sobre o Micro B voltando ao passo 1. E a partir de esse momento seus micros conversar\u00e3o sem necessidade de senha.<\/p>\n

Instalando os scripts<\/h5>\n

A instala\u00e7\u00e3o consiste na simples descompacta\u00e7\u00e3o do arquivo de distribui\u00e7\u00e3o sobre a raiz da sua \u00e1rvore de diret\u00f3rios. O conte\u00fado \u00e9 o seguinte:<\/p>\n

.\r\n\u251c\u2500\u2500 etc\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 route-sentry.ini\r\n\u2514\u2500\u2500 usr\r\n\u00a0\u00a0\u00a0 \u2514\u2500\u2500 sbin\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u251c\u2500\u2500 rscmd\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u251c\u2500\u2500 rsd\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u251c\u2500\u2500 rs-lib.sh\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u2514\u2500\u2500 rstest<\/pre>\n

Voc\u00ea pode ver se est\u00e1 tudo ok, utilizando o rstest<\/em> como no exemplo seguinte:<\/p>\n

$ rstest<\/strong>\r\nisHostOnline 127.0.0.1 = 1\r\nCurrent GW = 192.168.42.129\r\nisMyGatewayAlive = 0\r\nisCommonGWReachable = 1\r\namIRouter = 0\r\nisSiblingAlive = 1\r\nisOutsideWorldReachable = 1\r\nisSiblingRouting =<\/pre>\n

S\u00f3 isso j\u00e1 seria suficiente para montar seu pr\u00f3prio sistema de monitoramento, mas temos mais. Se o rstest<\/em> n\u00e3o\u00a0 devolve valores satisfat\u00f3rios para a situa\u00e7\u00e3o do micro de testes, revise o seguinte checklist antes de avan\u00e7ar:<\/p>\n

1) O Firewall est\u00e1 corretamente configurado de ambos os lados?
\n2) Posso conectar-me desde o Micro A ao Micro B sem senha?
\n3) Posso conectar-me do Micro B ao Micro A sem senha?
\n4) Tenho o route-sentry.ini bem configurado em ambos os lados?<\/p>\n

Se a resposta foi n\u00e3o para qualquer dos itens, ent\u00e3o volte ao inicio e revise.<\/p>\n

O miolo do assunto<\/h5>\n

O respons\u00e1vel por fazer a coisa toda funcionar \u00e9 o seguinte script:<\/p>\n

#!\/bin\/bash\r\n#\r\n# (C) 2014 Esteban Daniel Dortta\r\n# Router Sentry Daemon\r\n#\r\n\r\nmy_dir=\"$(dirname \"$0\")\"\r\nsource \"$my_dir\/rs-lib.sh\"\r\n\r\nwhile [ 1 -gt 0 ]; do\r\n\u00a0 amIrouter\r\n\u00a0 if [ $? -lt 1 ]; then\r\n\u00a0\u00a0\u00a0 isSiblingRouting\r\n\u00a0\u00a0\u00a0 if [ $? -lt 1 ]; then\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 holdRouterRole\r\n\u00a0\u00a0\u00a0 fi\r\n\u00a0 else\r\n\u00a0\u00a0\u00a0 isOutsideWorldReachable\r\n\u00a0\u00a0\u00a0 if [ $? -lt 1 ]; then\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 isSiblingAlive\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 if [ $? -lt 1 ]; then\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 rslog \"FATAL ERROR: Internet nor sibling are reachable\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 else\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 releaseRouterRole\r\n        sleep 30\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 fi\r\n\u00a0\u00a0\u00a0 fi\r\n\u00a0 fi\r\n\u00a0 sleep 10\r\ndone<\/pre>\n

O algoritmo (que deve rodar concomitantemente desde nos dois micros)\u00a0 n\u00e3o \u00e9 exaustivo no sentido em que n\u00e3o testa todas as condi\u00e7\u00f5es operacionais mas s\u00f3 as que s\u00e3o estritamente necess\u00e1rias para que um ou outro Micro assuma a fun\u00e7\u00e3o de roteador na rede.<\/p>\n

Em lugar de esperar para uma coisa dar errada, ele pergunta se as coisas est\u00e3o certas. Ou seja, se est\u00e1 tudo ok, para que vou mexer? Isso – claro – deixa de lado a situa\u00e7\u00e3o em que a rede est\u00e1 operacional mas haveria uma rota mais r\u00e1pida melhor ou mais econ\u00f4mica a ser utilizada mas como esse n\u00e3o \u00e9 o prop\u00f3sito desta primeira vers\u00e3o, deixaremos para uma poss\u00edvel segunda vers\u00e3o da solu\u00e7\u00e3o.<\/p>\n

Se o micro for o roteador, ele verifica se ele mesmo consegue acessar a internet. Novamente, se ele consegue acessar a internet, deixa tudo quieto.<\/p>\n

Se ele n\u00e3o consegue acessar o mundo exterior, verifica se o parceiro est\u00e1 vivo. Se estiver, ent\u00e3o ele libera os IPs e volta a esperar dando tempo suficiente para o irm\u00e3o tentar assumir o controle. Se o irm\u00e3o morreu e ele mesmo n\u00e3o tem acesso \u00e0 internet, devolve uma mensagem de erro no arquivo indicado na configura\u00e7\u00e3o pois n\u00e3o tem como sair do bueiro.<\/p>\n

N\u00e3o me estenderei no algoritmo, s\u00f3 direi que ele assume as fun\u00e7\u00f5es de roteador quando ele n\u00e3o \u00e9 roteador e o irm\u00e3o n\u00e3o est\u00e1 acess\u00edvel ou n\u00e3o consegue navegar no mundo exterior.<\/p>\n

Repare que n\u00e3o h\u00e1 ordens de um ao outro, s\u00f3 perguntas. Isso evita de termos um \u00e1rbitro entre os dois Micros.\u00a0 Dito de outra forma, os dois fazem o melhor esfor\u00e7o para manter a rede funcionando. Ganha o que chega primeiro.<\/p>\n

Para testar, rode ele nos dois micros.<\/p>\n

\/usr\/sbin\/rsd<\/pre>\n

Se tudo estiver ok, coloque ele para rodar no \/etc\/rc.local ou onde sua distribui\u00e7\u00e3o goste acrescentando a seguinte linha nos dois micros:<\/p>\n

\/usr\/sbin\/rsd &<\/pre>\n","protected":false},"excerpt":{"rendered":"

Um pouco de hist\u00f3ria Recentemente me vi na obriga\u00e7\u00e3o de dividir um servidor Linux em dois pois nele coincidiam duas linhas de acesso \u00e0 internet concentrando o tr\u00e1fego e distribuindo o mesmo conforme necess\u00e1rio entre as duas linhas de acesso. Quem me conhece sabe que sou p\u00e3o duro com dinheiro alheio. Relutei bastante em dividir […]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[95],"tags":[90,92,87,91,89,88],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5O6UV-3f","jetpack-related-posts":[{"id":321,"url":"http:\/\/www.yeapf.com\/wp\/?p=321","url_meta":{"origin":201,"position":0},"title":"Server Side Events com YeAPF","date":"janeiro 19, 2017","format":false,"excerpt":"Manter uma tela com dados din\u00e2micos atualizados n\u00e3o \u00e9 f\u00e1cil. Uma solu\u00e7\u00e3o \u00e9 empregar XMLHttpRequest e ficar fazendo polling sobre uma base de tempo regular. Assim perguntar\u00edamos ao servidor se h\u00e1 modifica\u00e7\u00f5es sobre o escopo desejado. O problema desta aproxima\u00e7\u00e3o \u00e9 que ficamos fazendo um monte de requisi\u00e7\u00f5es ao servidor\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":318,"url":"http:\/\/www.yeapf.com\/wp\/?p=318","url_meta":{"origin":201,"position":1},"title":"Usando btSync para sincronizar e desenvolver em equipe.","date":"novembro 28, 2016","format":false,"excerpt":"Um dos grandes desafios do desenvolvimento grupal \u00e9 manter o c\u00f3digo sincronizado. Concordo, claro, com aqueles que utilizam as ferramentas git\u00a0para poder criar uma vers\u00e3o tempor\u00e1ria (e pessoal) do c\u00f3digo e depois se enganchar de novo com a \u00e1rvore principal. \u00c9 obvio que\u00a0git \u00e9 bem melhor que\u00a0svn por exemplo. Muit\u00edssimo\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":454,"url":"http:\/\/www.yeapf.com\/wp\/?p=454","url_meta":{"origin":201,"position":2},"title":"Node + Electron + YeAPF","date":"agosto 3, 2018","format":false,"excerpt":"Saladas s\u00e3o boas. Por isso o t\u00edtulo mistura tr\u00eas coisas que j\u00e1 sozinhas s\u00e3o boas. O node te permite escrever aplicativos do lado do servidor ou do cliente usando a mesma linguagem: JavaScript. Neste vamos usa-lo para criar um aplicativo do lado cliente com t\u00e9cnicas de web (HTML5, CSS3 e\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"https:\/\/i2.wp.com\/www.yeapf.com\/wp\/wp-content\/uploads\/2018\/08\/Mixed-Green-Salad-with-Eggs-3-930x543.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":225,"url":"http:\/\/www.yeapf.com\/wp\/?p=225","url_meta":{"origin":201,"position":3},"title":"Firewall simples","date":"janeiro 12, 2015","format":false,"excerpt":"Situa\u00e7\u00e3o O iptables nos fornece uma ferramenta poderosa para a constru\u00e7\u00e3o de firewalls com m\u00e1quinas linux. Algumas vezes a gera\u00e7\u00e3o e manuten\u00e7\u00e3o desses firewalls se torna complexa demais e - via de regra - os departamentos de TI tem pessoal de menos para a cada vez mais imensa tarefa. A\u2026","rel":"","context":"Em "Route Sentry"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":237,"url":"http:\/\/www.yeapf.com\/wp\/?p=237","url_meta":{"origin":201,"position":4},"title":"Mudando todas as senhas de uma rede Linux heterog\u00eanea","date":"mar\u00e7o 24, 2015","format":false,"excerpt":"Me deparei esses dias com o seguinte problema: alterar as senhas de um grupo de servidores ao mesmo tempo. De inicio parece um problema simples, mas depois vimos que havia o problema dos certificados de autentica\u00e7\u00e3o com o que alguns usu\u00e1rios entravam nos servidores e para piorar, alguns servidores precisam\u2026","rel":"","context":"Em "Servidores"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":25,"url":"http:\/\/www.yeapf.com\/wp\/?p=25","url_meta":{"origin":201,"position":5},"title":"Primeiros passos com YeAPF","date":"fevereiro 22, 2014","format":false,"excerpt":"Tive oportunidade de ver minha irm\u00e3 mais nova andar sozinha pela primeira vez e nunca mais esqueci da experi\u00eancia. \u00a0Anos depois naceram os filhos e o impacto \u00e9 tremendo. Brinco com quem programa usando YeAPF de que s\u00e3o meus filhos, carinhosamente. Por isso que os primeiros passos s\u00e3o importantissimos para\u2026","rel":"","context":"Em "Yet Another PHP Framework"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/201"}],"collection":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=201"}],"version-history":[{"count":14,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/201\/revisions"}],"predecessor-version":[{"id":220,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/201\/revisions\/220"}],"wp:attachment":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=201"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}